【发布时间】: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