【问题标题】:CriteriaQuery with JPA 1.0使用 JPA 1.0 的 CriteriaQuery
【发布时间】:2011-03-29 12:50:14
【问题描述】:

是否可以在 JPA 1.0 中使用 CriteriaQuery。我猜 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的定义; (尝试过 import javax.persistence.criteria.CriteriaBuilder;以及)

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

谢谢。

【问题讨论】:

  • 有什么具体原因不能升级到 JPA2?
  • 我使用的框架自带hibernate(旧版本支持JPA 1.0)..我可能会尝试更新它..

标签: java hibernate orm jpa criteria-api


【解决方案1】:

是否可以在 JPA 1.0 中使用 CriteriaQuery。

不,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 的 专有 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();

参考文献

【讨论】:

    【解决方案2】:

    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 的部分。

    【讨论】:

    • 感谢您的详细回答。如果今天没有其他 cmets,将接受答案。谢谢
    猜你喜欢
    • 1970-01-01
    • 2012-07-24
    • 2011-04-12
    • 1970-01-01
    • 2015-05-15
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 2017-08-17
    相关资源
    最近更新 更多