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

时间:2012-07-09 17:00:38

标签: java-ee jpa ejb

在抽象类中使用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中存在的机制做相对相同的事情?

1 个答案:

答案 0 :(得分:3)

您可以使用以下方法:

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

请注意,如果您覆盖逻辑实体名称(@Entity(name = ...)),它将无法工作,但实际上并不常见。