嗨,我一直在臭名昭着“没有会话或会话被关闭”我知道这是因为我试图在另一个会话中调用一个hibernate持久化对象的集合,所以有没有办法实际做到这一点必须创建过滤器并将JOIN获取模式添加到其中....
GRAVE:懒得初始化角色集合:ni.edu.uni.id.data.object.Curso.modulos,没有会话或会话被关闭 org.hibernate.LazyInitializationException:懒得初始化角色集合:ni.edu.uni.id.data.object.Curso.modulos,没有会话或会话关闭
答案 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可能会有所帮助,具体取决于您的具体情况