Hibernate LazyInitializationException与惰性集合

Hibernate LazyInitializationException与惰性集合,hibernate,Hibernate,我实际上遇到了Hibernate的问题。我必须说我对此有点陌生,但我的代码已经存在,并且是由了解Hibernate的人构建的。问题是我正在尝试将Hibernate版本从v3.2.5迁移到3.6.9。代码实际上可以100%工作,但是当我更改JAR和所有不推荐的特性时,相同的代码不再工作了。所以,我的问题是: 我有一个客户机对象,它与状态有多对多关联(我们保存状态的历史记录)。默认情况下,此集合是惰性的。但是,当我进行客户研究时,我需要这些信息,所以我使用了CriteriaAPI。然后,我将状态集合


我实际上遇到了Hibernate的问题。我必须说我对此有点陌生,但我的代码已经存在,并且是由了解Hibernate的人构建的。问题是我正在尝试将Hibernate版本从v3.2.5迁移到3.6.9。代码实际上可以100%工作,但是当我更改JAR和所有不推荐的特性时,相同的代码不再工作了。所以,我的问题是:
我有一个
客户机
对象,它与
状态
有多对多关联(我们保存状态的历史记录)。默认情况下,此集合是惰性的。但是,当我进行客户研究时,我需要这些信息,所以我使用了CriteriaAPI。然后,我将状态集合设置为“急切”,如下所示:

Criteria lStatuCriteria = lIntrvCriteria.createCriteria(SimIntrv.SIM_STATU_INTRVS, Criteria.LEFT_JOIN);
然后我使用
Restrictions.in()
函数来过滤状态。问题是,在3.2.5中,当调用客户机对象的
list()
函数时,集合(在配置文件中设置为lazy)被正确加载。另一方面,在3.6.9中,未加载集合。我尝试使用setFetchMode设置fetchmode,但不起作用


有什么线索吗?

当您加入状态并对其进行筛选时,hibernate希望查询不会返回所有状态,并且不会初始化集合。我猜在旧版本中,状态是在客户端通过某个地方的getter加载后通过另一个往返获取的,现在不再是了。

我建议使用lStatuCriteria.setFetchMode(“mate”,FetchMode.EAGER)使用Fetch模式作为EAGER-in条件。

向我们展示更多的代码。我认为您的代码依赖于现已修复的Hibernate错误来正常工作。使用setFetchMode应该可以工作,但这完全取决于您是否正确使用它。如果看不到代码,就不可能说.FetchMode.EAGER是一个不推荐使用的特性。FetchMode.JOIN。这不是一个选项,因为它意味着大量的修改