EJB 3中的Criteria查询

时间:2009-10-16 13:37:41

标签: java jpa java-ee ejb-3.0 criteria

我可以对EJB3实体使用Criteria查询吗?如果是这样,我如何将它们与EntityManager结合使用?

3 个答案:

答案 0 :(得分:7)

JPA 2.0中引入的新功能之一是Criteria API。 您需要一个JPA2实现:

条件查询通过EntityManager.getCriteriaBuilder()访问,并通过普通的查询API执行。

EntityManager em = ...;
CriteriaBuilder qb = em.getCriteriaBuilder();
CriteriaQuery<Employee> query = qb.createQuery(Employee.class);
Root<Employee> employee = query.from(Employee.class);
query.where(qb.equal(employee.get("firstName"), "Bob"));
List<Employee> result = em.createQuery(query).getResultList();

答案 1 :(得分:1)

JPA 2(提供标准API)在JSR 317中定义,可以视为JSR 220(原始EJB / JPA规范)的后继者。因此,您的评论“是的。但这不是JPA 1.0 / EJB 3.0的一部分,这就是问题所在。”因为您可以在所有常见的应用程序服务器(WebLogic,JBOSS,Glassfish等)上交替使用JPA 2,所以绿色字段项目将使用JPA 2.0或更高版本。您会发现许多使用JP​​A 1实现的项目,但大多数公司正在替换JPA 1框架。

答案 2 :(得分:0)

JPA没有像Hibernate那样提供Criteria API。但是您可以使用ejb3criteria,这是一个基于针对EJB3持久性的Hibernate Criteria API设计提供API的库。 ejb3criteria可以与任何EJB3 Persistence实现一起使用。