【发布时间】:2015-02-09 17:04:41
【问题描述】:
我有一个父对象和它的细节对象。 下面的代码中提到了映射 -
父对象映射
<?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>
子对象映射
<?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 个孩子。 现在,在更新操作中,
在 parent.childSet 中,我将删除所有值并设置新值。 当我做 session.update(parent) 时,我的要求是,
- 删除父级的所有现有子级 - 因为 parent.childSet 没有它们。
- 插入 parent.childSet 中可用的新值。
这里,parent.childSet 表示父类/HBM 映射中的集合。
现在发生的问题是,
- 抛出异常 - “无法将 NULL 插入 ("CHILD"."PARENT_ID")”
如果不清楚,我会继续更新问题。
感谢您的宝贵时间!
【问题讨论】:
-
你能发布代码 sn-p 你如何删除现有的孩子并添加新的孩子
-
@Ramesh 这是一个简单的从数据访问层获取父对象。然后,一个简单的java操作来清除Parent对象中的childSet对象。然后使用 Collection add 向 childSet 添加新值。实际上这些值来自 UI,所以每次我们都会清除 childSet 并在每次更新时添加新的孩子。
-
这个问题没有明确的答案,而且我正在使用hbm xml进行映射。
-
不,问题不在于映射。问题可能出在 java 代码中。请参阅该问题中的 Diego Pino 答案。它可能会有所帮助。否则发布java代码我会说在哪里更正它
标签: hibernate hibernate-mapping hbm hibernate-onetomany bidirectional-relation