Hibernate从另一个会话中获取Collection

时间:2011-03-28 05:12:51

标签: java hibernate hibernate3

嗨,我一直在臭名昭着“没有会话或会话被关闭”我知道这是因为我试图在另一个会话中调用一个hibernate持久化对象的集合,所以有没有办法实际做到这一点必须创建过滤器并将JOIN获取模式添加到其中....

GRAVE:懒得初始化角色集合:ni.edu.uni.id.data.object.Curso.modulos,没有会话或会话被关闭 org.hibernate.LazyInitializationException:懒得初始化角色集合:ni.edu.uni.id.data.object.Curso.modulos,没有会话或会话关闭

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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.

答案 2 :(得分:-1)

session.merge可能会有所帮助,具体取决于您的具体情况