假设我有一个具有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?

07-27 17:57