3

是否可以将 CriteriaQuery 与 JPA 1.0 一起使用。我猜 JPA 2.0 不适用于 Java Se(版本 -- Java(TM) SE Runtime Environment (build 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;以及)

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

谢谢。

4

2 回答 2

7

是否可以将 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 的专有API for Criteria Queries。您需要访问Session这样做:

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

参考

于 2010-08-13T17:17:09.627 回答
1

JPA2 肯定可用于 Java SE,但默认情况下它不随 JDK 一起提供。

由于 JPA1 规范没有指定诸如getCriteriaBuilder()EntityManager 上的方法之类的东西,因此如果不升级到 JPA2,您不太可能能够轻松使用它们。

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

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

于 2010-08-13T15:22:20.150 回答