【问题标题】:Using session object to create CriteriaBuilder to create a CriteriaQuery since CriteriaAPI is deprecated使用会话对象创建 CriteriaBuilder 来创建 CriteriaQuery,因为 CriteriaAPI 已被弃用
【发布时间】:2016-10-15 05:06:46
【问题描述】:

我正在学习 Hibernate,并且已经使用 Hibernate 构建了一个项目,并且我创建了一个 SessionFactory 对象,然后使用 SessionFactory 的 openSession 方法创建了一个 Session 对象。

在尝试使用 Hibernate 的 Criteria API 时,我发现它自我使用的 5.2.3 最终版本以来已被弃用。

我不想使用 EntityManagerFactory 创建 EntityManager 对象,因为我已经在使用 SessionFactory。 这就是我所做的。

---
try (Session session = HibernateUtil.getSessionfactory().openSession()) {
        CriteriaBuilder criteriaBuilder = session.getCriteriaBuilder();

        session.beginTransaction();

        CriteriaQuery<Transaction> criteriaQuery = criteriaBuilder.createQuery(Transaction.class);

        Root<Transaction> root = criteriaQuery.from(Transaction.class);

        criteriaQuery.select(root);

        List<Transaction> transactions = session.createQuery(criteriaQuery).getResultList();


        for (Transaction transaction : transactions) {
            System.out.println(transaction.getTitle());
        }
---

这肯定不是最好的方法,因为 Hibernate 是建立在 JPA 之上的,最好的方法是使用 EntityManager。是否有任何其他解决方法可以解决我正在做的事情,而不是必须创建一个 EntityManagerFactory,然后使用上述工厂创建一个 EntityManager 对象,因为这意味着我必须对程序设计进行很多其他更改。

【问题讨论】:

  • 为什么要学习已经弃用的东西,为什么不使用 EntityManager?这是你的选择,但不要用 `jpa. 标记问题
  • 是的。后来我意识到,想要继续使用不再受支持的东西,这样我就不必更改一些程序设计,这是一种非常错误的方法。我进行了必要的更改并转而使用 EntityManager。谢谢。

标签: java hibernate hibernate-criteria criteria-api


【解决方案1】:

正如我所见,不幸的是没有这样的 API 可以替代 Hibernate 中的 Criteria API。请咨询5.1 documentaion 解释它。 我还想使用 SessionFactory 实例来处理查询,但建议使用 EntityManager 以编程方式构建查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 2020-08-18
    • 2023-03-15
    • 2014-12-22
    相关资源
    最近更新 更多