Hibernate 一对多单向映射列表

发布于 2024-09-27 10:39:39 字数 570 浏览 2 评论 0原文

我的父级和子级 Java 对象之间有一对多关系。父对象使用 java.util.List 来存储多个子对象。我遇到的问题是在将一个或多个子对象添加到父对象中的 List 后更新父对象时。我正在使用 saveOrUpdate 方法来保存或更新父级。如果我保存父级的新实例,它工作正常,但保存后,我尝试将子对象添加到父级 List 中,然后尝试调用 saveOrUpdate 在父对象上,但子对象的任何条目都不会保存到数据库中。我只是想要一些指点。 注意:我没有使用注释。
Parent.hbm.xml 的片段,定义一对多单向关系:

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

I have one-to-many relationship between parent and child Java objects. The parent object uses java.util.List that stores multiple child objects. The problem I am experiencing is when updating the parent object after I have added one or more child object(s) to the List in the parent. I am using the saveOrUpdate method to save or update the parent. It works fine if I am saving a new instance of the parent, but after saving it, I try to add child object(s) into the parent List and then attempt to call saveOrUpdate on the parent object, but no entries of child object(s) get persisted into the database. I just would like some pointers. Note: I am not using annotations.
A snippet of the Parent.hbm.xml, that defines the one-to-many unidirectional relationship:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

晨曦÷微暖 2024-10-04 10:39:39

我只是尝试重现这个例子,它对我来说效果很好。

这是我的映射:

<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" 添加到父映射中。

您是否尝试在 hibernate 配置中设置 show_sql 来查看生成的 SQL?

I just tried to reproduce this example and it worked OK for me.

Here are my mappings:

<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>

I added not-null="true" to the parent mapping.

Did you try to set show_sql in your hibernate config to see generated SQL?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文