0

嗨,我得到了臭名昭著的“没有会话或会话已关闭”我知道这是因为我试图在另一个会话中调用一个休眠持久对象的集合,所以有没有办法在不必创建的情况下实际做到这一点过滤器并将 JOIN 提取模式添加到其中....

坟墓:无法延迟初始化角色集合:ni.edu.uni.id.data.object.Curso.modulos,没有会话或会话关闭 org.hibernate.LazyInitializationException:无法延迟初始化角色集合:ni。 edu.uni.id.data.object.Curso.modulos,没有会话或会话被关闭

4

3 回答 3

0

发生这种情况是因为原始会话已关闭。在将项目存储在内存中之前,以及在关闭 Hibernate 会话之前,您需要访问稍后将使用的任何链接集合,以便将其加载到内存中。对此的替代方法是设置集合以便它是渴望加载的,但这可能会影响性能。

甚至可以通过访问.Count属性(C#,但同样适用于 Java)来手动预加载集合。例子:

Brand b = BrandRepository.GetById(1234);
int tmp = b.Products.Count; //this is only to load the products collection.  This can then be used in a later session.
于 2012-10-23T08:02:47.937 回答
0

最好刷新持久化对象。例如,通过对象的 id 调用 DAO getById(),然后使用必要的集合。

于 2011-03-28T10:02:12.867 回答
-1

session.merge MIGHT help depending on your exact situation

于 2011-03-28T05:20:30.550 回答