CriteriaQuery with JPA 1.0

时间:2010-08-13 15:06:02

标签: java hibernate orm jpa criteria-api

是否可以将CriteriaQuery与JPA 1.0一起使用。我猜JPA 2.0不适用于Java Se(版本 - Java(TM)SE运行时环境(版本1.6.0_16-b01))。我与使用联系在一起,

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Test> cq = cb.createQuery(Test.class);
Root<Test> test= cq.from(Test.class);

...

但是在javax.persistence中找不到CriteriaBuilder的定义。*; (尝试导入javax.persistence.criteria.CriteriaBuilder;以及)

如果不可能,我有什么最好的选择。我在后端使用hibernate,但仍然有非专有的方法来做到这一点?如果不是在休眠怎么办?

感谢。

2 个答案:

答案 0 :(得分:6)

  

是否可以将CriteriaQuery与JPA 1.0一起使用。

不,JPA 1.0没有指定Criteria API,Criteria API是JPA 2.0新功能的一部分。

  

我猜JPA 2.0不适用于Java SE

JPA 1.0和JPA 2.0都不是Java SE(捆绑)的一部分。但是,您可以在Java SE中使用JPA(1.0或2.0)。

  

(...)但是在javax.persistence中找不到CriteriaBuilder的定义。*

如上所述,这不是JPA 1.0 API的一部分,如果您没有使用JPA 2.0实现,则无法找到它。

  

如果不可能,我有什么最好的选择。我在后端使用hibernate,但仍然有非专有的方法来做到这一点?如果不是怎么做hibernate?

您的唯一选择是使用Hibernate的专有 API Criteria Queries。您需要访问Session才能执行此操作:

org.hibernate.Session session = (Session) em.getDelegate(); 
Criteria crit = session.createCriteria(Cat.class);
crit.setMaxResults(50);
List cats = crit.list();

参考

答案 1 :(得分:0)

JPA2当然可用于Java SE,但默认情况下不附带JDK。

由于JPA1规范没有在EntityManager上指定类似getCriteriaBuilder()方法的内容,因此如果不升级到JPA2,则不太可能轻松使用它们。

Hibernate 3.5+的hibernate-entitymanager.jar文件为Hibernate实现了JPA2 api,并允许您在Java SE中使用新的JPA功能。

有关详细信息,我建议Hibernate CoreHibernate Entity Manager的参考文档,特别是后者中有关在Java SE中获取EntityManager的部分。

相关问题