![](/img/trans.png)
[英]Inserting @OneToMany relation object with child not inserting parent id in child table?
[英]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.