使用会话对象创建CriteriaBuilder以创建CriteriaQuery,因为不推荐使用CriteriaAPI

时间:2016-10-15 05:06:47

标签: java hibernate hibernate-criteria criteria-api

我正在学习Hibernate,并且已经使用Hibernate构建了一个项目,并且我使用SessionFactory的openSession方法创建了一个SessionFactory对象,然后创建了一个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对象,因为这意味着我必须对程序设计进行许多其他更改

1 个答案:

答案 0 :(得分:0)

我可以看到,不幸的是,没有这样的API取代了Hibernate中的Criteria API。请参考解释它的5.1 documentaion。 我还想使用SessionFactory实例来处理查询,但建议使用EntityManager以编程方式构建查询。