Hibernate 映射:在 Hibernate 中的一对多双向映射中删除 children
Hibernate Mapping : delete children in one to many bidirectional mapping in hibernate
我有一个 parent object 及其详细信息 object。
下面的代码中提到了映射 -
Parent Object 映射
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class lazy = "false" name="com.test.model.Parent" table="parent">
<id name="parentId" column="PARENT_ID" type="long">
<generator class="sequence">
<param name="sequence">PARENT_ID_SEQ</param>
</generator>
</id>
<set
name="childSet"
lazy="false"
cascade="all-delete-orphan"
inverse="true"
table = "child"
order-by = "CHILD_ID"
>
<key column="PARENT_ID"/>
<one-to-many class="com.test.model.Child"/>
</set>
</class>
</hibernate-mapping>
Child Object 映射
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.test.model.Child" table="hot_Cash_coupon">
<id name="childId" column="CHILD_ID" type="long">
<generator class="sequence">
<param name="sequence">CHILD_ID_SEQ</param>
</generator>
</id>
<many-to-one name="parent"
class="com.test.model.Parent" column="PARENT_ID" not-null="true" />
</class>
</hibernate-mapping>
我可以用 3 children 保存一个新的 parent。
现在,在更新操作中,
在 parent.childSet 中,我将删除所有值并设置新值。
当我做 session.update(parent) 时,我的要求是
- 删除 parent 的所有现有 children - 因为 parent.childSet 没有它们。
- 插入 parent.childSet 中可用的新值。
这里,parent.childSet表示,Set in Parent Class/HBM Mapping.
现在发生的问题是,
- 正在抛出异常 - "cannot insert NULL into ("CHILD"."PARENT_ID")"
问题不明白我会继续更新
感谢您的宝贵时间!
目前我正在做一个session.update(parent)。 CHILD table 中存在的外键和孤立记录无效。在我手动对孤儿进行 session.delete(...) 之后。
这与其说是解决方案,不如说是一种变通方法。
我有一个 parent object 及其详细信息 object。 下面的代码中提到了映射 -
Parent Object 映射
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class lazy = "false" name="com.test.model.Parent" table="parent">
<id name="parentId" column="PARENT_ID" type="long">
<generator class="sequence">
<param name="sequence">PARENT_ID_SEQ</param>
</generator>
</id>
<set
name="childSet"
lazy="false"
cascade="all-delete-orphan"
inverse="true"
table = "child"
order-by = "CHILD_ID"
>
<key column="PARENT_ID"/>
<one-to-many class="com.test.model.Child"/>
</set>
</class>
</hibernate-mapping>
Child Object 映射
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.test.model.Child" table="hot_Cash_coupon">
<id name="childId" column="CHILD_ID" type="long">
<generator class="sequence">
<param name="sequence">CHILD_ID_SEQ</param>
</generator>
</id>
<many-to-one name="parent"
class="com.test.model.Parent" column="PARENT_ID" not-null="true" />
</class>
</hibernate-mapping>
我可以用 3 children 保存一个新的 parent。 现在,在更新操作中,
在 parent.childSet 中,我将删除所有值并设置新值。 当我做 session.update(parent) 时,我的要求是
- 删除 parent 的所有现有 children - 因为 parent.childSet 没有它们。
- 插入 parent.childSet 中可用的新值。
这里,parent.childSet表示,Set in Parent Class/HBM Mapping.
现在发生的问题是,
- 正在抛出异常 - "cannot insert NULL into ("CHILD"."PARENT_ID")"
问题不明白我会继续更新
感谢您的宝贵时间!
目前我正在做一个session.update(parent)。 CHILD table 中存在的外键和孤立记录无效。在我手动对孤儿进行 session.delete(...) 之后。
这与其说是解决方案,不如说是一种变通方法。