【问题标题】:Hibernate One To Many Unidirectional Mapping ListHibernate 一对多单向映射列表
【发布时间】:2011-04-24 20:57:09
【问题描述】:

我在父子 Java 对象之间有one-to-many 关系。父对象使用存储多个子对象的java.util.List。我遇到的问题是在将一个或多个子对象添加到父对象中的List 之后更新父对象时。我正在使用saveOrUpdate 方法来保存或更新父级。如果我保存父对象的新实例,它工作正常,但保存后,我尝试将子对象添加到父对象List,然后尝试在父对象上调用saveOrUpdate,但没有条目的子对象被持久化到数据库中。我只是想要一些指示。 注意:我没有使用注释。
Parent.hbm.xml 的 sn-p,它定义了一对多的单向关系:

  <list name="children" cascade="all">
     <key column="parent_id"/>
     <index column="idx"/>
     <one-to-many class="Child"/>
  </list>

【问题讨论】:

    标签: java one-to-many hibernate-mapping


    【解决方案1】:

    我只是尝试重现此示例,它对我来说效果很好。

    这是我的映射:

    <hibernate-mapping package="com.example.domain">
        <class name="com.example.domain.Parent" table="PARENT">
    
            <id name="id" column="parent_id" access="field">
                <generator class="increment" />
            </id>
            <property name="name" column="parent_name" access="field" />
    
            <list name="children" access="field" cascade="all">
                <key column="parent_id" not-null="true" />
                <index column="idx" />
                <one-to-many class="Child" />
            </list>
        </class>
    </hibernate-mapping>
    
    <hibernate-mapping package="com.example.domain">
        <class name="com.example.domain.Child" table="CHILD">
            <id name="id" column="child_id" access="field">
                <generator class="increment" />
            </id>
            <property name="name" column="child_name" access="field" />
        </class>
    </hibernate-mapping>
    

    我在父映射中添加了not-null="true"

    您是否尝试在休眠配置中设置 show_sql 以查看生成的 SQL?

    【讨论】:

    • 谢谢罗曼。我已经按照你的建议尝试了。但是,我得到一个异常:“org.hibernate.LazyInitializationException:未能延迟初始化角色集合:Parent.children,没有会话或会话被关闭”。从数据库加载父级后,对 parent.getChildren 的 JUnit 测试失败。
    • 是的,分离的实体会发生这种情况。根据要求(例如是否必须始终加载子项),您可以急切地加载它们(为此,您可以在列表中设置lazy="false")。您可以在 Hibernate 网站上阅读更多内容:docs.jboss.org/hibernate/core/3.5/reference/en/html/…。另外,请考虑“在视图中打开会话”模式。
    • 另外,这个 SO 线程有更多关于这个问题的信息:stackoverflow.com/questions/345705/…
    猜你喜欢
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多