繁体   English   中英

插入父项及其子项时,Hibernate可以在插入子项时设置父项ID,而不必在之后进行更新吗?

[英]When inserting a parent and its children can Hibernate set the parent id when inserting the child rather than having to update after?

我有两个对象

public class Parent {
    int id;
    String name;
    int Set<Child> children;
}

public class Child {
    int id;
    String name;
    int parentId;
}

带有以下映射文件

<hibernate-mapping>
    <class name="Parent" table="parent">
        <id column="id" access="field">
            <generator class="identity"/>
        </id>    
        <property name="name" column="name" access="field" />    
        <set name="children" access="property" cascade="all" lazy="true"  >
            <key><column name="parent_id"/></key>
            <one-to-many class="com.hp.autonomy.corepolicy.common.dto.LexiconExpression"/>
        </set>
    </class>
    <class name="Child" table="child">
        <id column="id" access="field">
            <generator class="identity"/>
        </id>    
        <property name="name" column="name" access="field" />            
        <property name="parentId" column="parent_id" access="field" not-null="true" />
    </class>
</hibernate-mapping>

当我保存一个有一个孩子的父母时,生成的SQL看起来像

休眠:插入父(id,name)值(null 、?)

休眠:插入子(id,parent_id,name)值(null,?,?)

休眠:更新子集parent_id =? id =?

似乎当hibernate插入子项时,它将parent_id设置为null,然后出现并在之后对其进行更新。 这会导致我的数据库和休眠验证出现问题,因为该模式表明parent_id不能为null。

是否有可能让第二个插入语句使用在插入父级时创建的parent_id,而不是稍后再来更新子级?

你需要改变

<property name="parentId" column="parent_id" access="field" not-null="true" />

通过

<many-to-one name="parent" class="change to the parent classname">
     <column name="parent_id" not-null="true" access="field"/>
</many-to-one>

您将需要更改Child类以具有parent成员而不是parentId并相应地更新上面的配置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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