假设我有一个Post
类,其中包含PostComment
个集合,并且我加载了Post。 PostComment设置为lazy =“true”,因此PostComment现在由Hibernate代理表示。
如果我在会话中加载Post
,我们将其称为session1
,然后在访问PostComment之前关闭session1,如何从稍后打开的第二个会话中访问PostComment?
我试图从session2访问PostComment但是得到了LazyInizializationException,我认为启用延迟加载就足以让会话打开,而不是加载父对象的同一个会话。
我应该使用session2.update()将对象附加到session2吗?除了在整个过程中使用相同的会话之外还有其他方法吗?
答案 0 :(得分:1)
您可以将对象重新挂接到您在帖子中描述的新会话,或者使用FetchType.EAGER
作为您的提取类型禁用延迟初始化,例如:
@OneToMany(fetch = FetchType.EAGER)
private Map<String, Attribute> attributes = new HashMap<String, Attribute>();
有关懒惰和渴望提取之间差异的详情,请参阅此帖子:Difference between FetchType LAZY and EAGER in Java Persistence API?