![](/img/trans.png)
[英]Hibernate: LazyInitializationException: failed to lazily initialize a collection of role
[英]“failed to lazily initialize a collection of role” in Hibernate
我已经看过这个问题了很多,而且我知道为什么会发生,我只是在尝试解决我的特定情况时遇到问题。
我正在将正在进行的项目从使用XML文件映射类到Hibernate的数据库表转换为使用Hibernate批注。 只要我使用基本的Java类型(原始体或原始体的类版本,例如int或Integer),一切都会很好。 但是,当我的班级的成员是我的另一类时,事情就往南走。
一种类型的问题是我有一对多关系。
在foo的XML文件中说:
<set inverse="true" name="barList">
<key>
<column name="foo_id"/>
</key>
<one-to-many class="com.me.model.dao.Bar" />
</set>
在将其转换为注释时,我得到以下结果:
@OneToMany
@JoinTable(name = "bar", inverseJoinColumns = @JoinColumn(name = "foo_id"))
public Set<Bar> getBarList() {
return barList;
}
我已经尝试了其他的变体(包括一个JoinColumn),但我知道它可能是不完整的,但是就像我说的那样,当我遇到麻烦的初始异常时,我很难找到合适的解决方案在我的MVC视图中使用对象。 据说FetchType.EAGER是一种解决方法,而不是解决方案,但是奇怪的是,没有提供解决方案。 也许需要更多信息。
编辑:添加barList出现在foo类中可能会有所帮助,而数据库中的foo中没有任何对bar的引用。 foo表确实具有bar_id。
实际上,注释有助于使映射更简单,更轻松。 xml或注释也是相同的想法(使Hibernate理解我们的对象之间的关系)。 在这种情况下,映射就像这样简单:
@OneToMany(mappedBy="foo")
private Set<Bar> barList;
对于整个细节,该示例与您的示例相同: https : //www.mkyong.com/hibernate/hibernate-one-to-many-relationship-example-annotation/
希望对您有所帮助。
我认为这取决于您的事务管理配置,因为当您使用FetchType.LAZY
时,直到您通过其getter方法调用它后,才会加载惰性列表。 因此,如果在提交事务后调用getter方法,则会抛出此异常。 请检查您的交易配置或在此处发送该部分代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.