假设我有一个具有Post
集合的PostComment
类,并且我加载了Post。 PostComment设置了lazy =“ true”,因此PostComment现在由Hibernate代理表示。
如果在会话中加载Post
,我们将其称为session1
,然后在访问PostComment之前关闭session1,如何从以后打开的第二个会话中访问PostComment?
我尝试从session2访问PostComment,但遇到LazyInizializationException,我相信要启用延迟加载就足以打开一个会话,而不是加载父对象的同一会话。
我应该使用session2.update()将对象附加到session2吗?除了在整个过程中使用同一会话之外,还有其他方法吗?
最佳答案
您可以按照帖子中的描述将对象重新附加到新的会话,或者通过使用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?