0

我有一个父对象及其详细对象。 的映射在下面的代码中提到 -休眠映射:在休眠时删除一对多的双向映射

父对象映射

<?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(父母),我的要求是,

  1. 删除所有现有子父 - 作为parent.childSet没有他们。
  2. 插入parent.childSet中可用的新值。

这里,parent.childSet意味着,在父类/ HBM映射中设置。

现在发生的事情是,

  1. 它抛出异常的问题 - “不能将NULL插入

我会不断更新,如果它的问题(” 子PARENT_ID “ ”“)”不清楚。

谢谢你的时间!

+0

你可以发布代码片段,你是如何删除现有的孩子和添加新的孩子 – Ramesh 2015-02-10 09:01:02

+0

@Ramesh 这是一个简单的从数据访问层获取父对象。 然后,执行一个简单的java操作来清除Parent对象中的childSet对象。然后使用Collection添加新的值到childSet。 实际上这些值来自用户界面,所以每次我们清理childSet并在每次更新时添加新的孩子。 – 2015-02-10 10:23:33

+0

请参阅此问题http://stackoverflow.com/questions/12568503/hibernate-does-not-delete-orphans-on-onetomany – Ramesh 2015-02-10 11:31:17

回答

0

暂时我正在做一个session.update(父母)。在CHILD表中存在无效的外键和孤立记录。之后我会手动完成一个会话,删除(...)孤儿。

这是比解决方案更多的解决方法。