Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何解决Hibernate';s LazyInitializationException_Java_Hibernate - Fatal编程技术网

Java 如何解决Hibernate';s LazyInitializationException

Java 如何解决Hibernate';s LazyInitializationException,java,hibernate,Java,Hibernate,我将CustomerEntity映射到数据库中的表customers。它与订单和地址有一对多关系。现在,我用下一个代码检索客户订单: DetachedCriteria criteria = DetachedCriteria.forClass(CustomerEntity.class); criteria.add(Restrictions.eq("id", patientId)); criteria.createCriteria("orders", CriteriaSpecification.LE

我将CustomerEntity映射到数据库中的表
customers
。它与
订单
地址
有一对多关系。现在,我用下一个代码检索客户订单:

DetachedCriteria criteria = DetachedCriteria.forClass(CustomerEntity.class);
criteria.add(Restrictions.eq("id", patientId));
criteria.createCriteria("orders", CriteriaSpecification.LEFT_JOIN).add(Restrictions.and(
          Restrictions.isNull("deletedDate"),
          Restrictions.or(Restrictions.isNull("old"), Restrictions.eq("old", BoolType.FALSE))));
CustomerEntity customer = queryDao.searchSingle(criteria);
克雷道:

public <T> T searchSingle(DetachedCriteria criteria) {
   return (T) criteria.getExecutableCriteria(getCurrentSession()).uniqueResult();
}
这是因为默认情况下hibernate没有加载一对多实体。
如何在不修改
客户
实体的情况下也检索其
地址
呢?

如果在
会话
不可用的情况下尝试访问延迟加载集合或字段,则会发生此异常。我的猜测是-应用程序的后端加载数据并关闭会话,然后将这些数据传递到前端,例如,在没有会话的情况下

要解决这个问题,有几种可能的方法:

  • 急切的装载。可靠但可能缓慢的解决方案
  • 更改会话管理的方式。考虑策略>代码>每次请求会话/>代码>,适用于典型的Web应用程序。该问题包含可能对您有用的信息

有关其他会话管理策略的信息,请尝试阅读。

以下几点可以帮助您:

  • 使用
    Hibernate.initialize(customer.getAddresses())
  • 您没有显示customer.getAddresses()的使用位置。。。因此,另一种方法是在视图中使用Hibernate Open Session(以及前面答案中提到的其他会话管理策略)

我不得不在这里摇动手指:如果你在谷歌上搜索“hibernate lazyinitializationexception”,你会得到大量关于如何、为什么以及如何解决的信息,包括大量现有的stackoverflow线程。
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: , no session or session was closed