从实体类创建一个JPA1抽象类findAll方法



在抽象类中使用EntityManager,我试图创建一个函数,该函数从实体类返回表中所有结果的列表。每个表都有自己的持久性类,该类继承自抽象类。到目前为止,我有:

public abstract class AbstractFacade<T> {
    private Class<T> entityClass;
    ...
    public List<T> findAll() {
        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        cq.select(cq.from(entityClass));
        return getEntityManager().createQuery(cq).getResultList();
    }
}

这适用于JPA 2.0,但我刚刚发现我的服务器仅限于JPA 1.0,它不支持getCriteriaBuilder()createQuery(CriteriaQuery cq)

有没有一种方法可以重新考虑我的代码,用JPA 1.0中存在的机制做相对相同的事情?

您可以使用以下方法:

public List<T> findAll() {
    return (List<T>) getEntityManager().createQuery(
        "select e from " + entityClass.getSimpleName() + " e")
        .getResultList();
}

请注意,如果重写逻辑实体名称(@Entity(name = ...)),它将不起作用,但在实践中这种情况并不常见。

最新更新