gpt4 book ai didi

java - JPA createQuery 工作但 createCriteria 不工作 session 已关闭错误

转载 作者:行者123 更新时间:2023-12-01 13:17:13 24 4
gpt4 key购买 nike

我正在尝试通过从 EntityManager 获取 hibernate session 来使用 Hibernate 的 Criteria API,如下所示

public org.hibernate.Criteria getCriteria() {
HibernateEntityManager hem = em.unwrap(HibernateEntityManager.class);
org.hibernate.Session session = hem.getSession();
return session.createCriteria(getEntityBeanType());
}

在 createCriteria 返回中,我收到“ session 已关闭错误”。

如果我调用 createQuery 方法,则从我调用 getCriteria 的同一代码点开始

getEntityManager().createQuery(".....");

它工作正常,我可以在数据库上进行选择。

我想使用 Hibernate Criteria API,因为我对它很满意。

最佳答案

这里的要点是,Criteria 对象仅在 Session 对象打开时存在,如果 Session 对象已关闭 Criteria 对象将不起作用,有一个名为 DetachedCriteria 的类允许开发人员创建 session 对象外部的条件查询然后将它们附加到它并能够运行。了解更多关于独立 here

当 hibernate session 不存在时,分离标准是非常好的替代方案

你可以使用这样的东西。

//Not required a session open
DetachedCriteria query = DetachedCriteria.forClass(Employee.class);
query.add(Property.forName("name").eq("Som"));

//Here we open the session
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
List<Employee> employeeList = new ArrayList<Employee>();

//Then we associate the criteria query with the session and run it
employeeList = query.getExecutableCriteria(session).list();
Iterator it = employeeList.iterator();

关于java - JPA createQuery 工作但 createCriteria 不工作 session 已关闭错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22369344/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com