2011-03-28 59 views
0

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

GRAVE:未能延迟初始化角色集合:ni.edu.uni.id.data.object。 Curso.modulos,没有会话或会话关闭 org.hibernate.LazyInitializationException:无法懒惰地初始化角色集合:ni.edu.uni.id.data.object.Curso.modulos,没有会话或会话关闭

回答

-1

session.m erge根据具体情况提供更多帮助

0

刷新持久对象会更好。例如。调用DAO getById()传递对象的id,然后使用必要的集合。

+0

认真吗?我害怕有人说:| – Necronet 2011-03-28 14:37:48

0

发生这种情况是因为原始会话已关闭。在将项存储在内存中之前,在Hibernate会话关闭之前,您需要访问将在稍后使用的任何链接集合,以便将其加载到内存中。另一种方法是设置集合,使其处于Eager加载状态,但这可能会影响性能。

通过即使访问.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.