繁体   English   中英

Hibernate中的“未能延迟初始化角色集合”

[英]“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是一种解决方法,而不是解决方案,但是奇怪的是,没有提供解决方案。 也许需要更多信息。

  • 我的MVC是Wicket 1.4.17。
  • 我的应用服务器是Widlfly(即没有web.xml)
  • Java版本是8。
  • 通过Maven POM休眠
    • 工件:冬眠
    • 版本:3.5.0.ga
    • 工件:ejb3-持久性
    • 版本:1.0.1.GA

编辑:添加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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM