Hibernate,懒惰的行为和多个会话

时间:2018-02-13 21:42:07

标签: java hibernate

假设我有一个Post类,其中包含PostComment个集合,并且我加载了Post。 PostComment设置为lazy =“true”,因此PostComment现在由Hibernate代理表示。

如果我在会话中加载Post,我们将其称为session1,然后在访问PostComment之前关闭session1,如何从稍后打开的第二个会话中访问PostComment?

我试图从session2访问PostComment但是得到了LazyInizializationException,我认为启用延迟加载就足以让会话打开,而不是加载父对象的同一个会话。

我应该使用session2.update()将对象附加到session2吗?除了在整个过程中使用相同的会话之外还有其他方法吗?

1 个答案:

答案 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?