Java 使用会话对象创建CriteriaBuilder以创建CriteriaQuery,因为CriteriaAPI已被弃用

Java 使用会话对象创建CriteriaBuilder以创建CriteriaQuery,因为CriteriaAPI已被弃用,java,hibernate,hibernate-criteria,criteria-api,Java,Hibernate,Hibernate Criteria,Criteria Api,我正在学习Hibernate,已经使用Hibernate构建了一个项目,我创建了一个SessionFactory对象,然后使用SessionFactory的openSession方法创建了一个Session对象 在尝试使用Hibernate的CriteriaAPI时,我发现自从我使用的5.2.3最终版本以来,它就已经被弃用了 我不想使用EntityManagerFactory创建EntityManager对象,因为我已经在使用SessionFactory。 这就是我所做的 --- try (Se

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

在尝试使用Hibernate的CriteriaAPI时,我发现自从我使用的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对象,因为这意味着我必须对程序设计进行许多其他更改。

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

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

为什么要学习一些已经弃用的东西,为什么不使用EntityManager?这是你的选择,但是不要在问题上加上“jpa.Yes”的标签。后来我意识到,想要继续使用不再受支持的东西,只是为了不改变一些程序设计,这是一种非常错误的方法。我做了必要的更改,转而使用EntityManager。谢谢。为什么要学习一些已经不推荐的东西,为什么不使用EntityManager?这是你的选择,但是不要在问题上加上“jpa.Yes”的标签。后来我意识到,想要继续使用不再受支持的东西,只是为了不改变一些程序设计,这是一种非常错误的方法。我做了必要的更改,转而使用EntityManager。谢谢