在Hibernate中删除一对多映射中的父和子

时间:2013-02-28 21:51:46

标签: hibernate orm hibernate-mapping

父表                                            

    <property name="buyerGroupName"    type="string"        column="BUYER_GROUP_NAME" />
    <property name="description"       type="string"        column="DESCRIPTION" />
    <property name="approvalPathId"    type="int"           column="APPROVAL_PATH_ID" />
    <property name="active"            type="int"           column="ACTIVE" />
    <property name="createdOn"         type="timestamp">
            <column name="CREATED_ON" length="20" not-null="true" />
    </property>

    <set name="buyers" table="buyers" cascade="all" >
        <key>
            <column name="BG_ID" not-null="true" />
        </key>
        <one-to-many class="com.sg.beans.Buyers" />
    </set>


</class>
  </hibernate-mapping>

子表映射

  <hibernate-mapping>
<class name="com.sg.beans.Buyers" table="buyers" >
    <id  name="id" type="int"  column="ID">
        <generator class="increment" />
    </id>

    <property    name="loginId" type="int" column="LOGIN_ID" />

    <many-to-one name="buyerGroup" class="com.sg.beans.BuyerGroup"    fetch="select" cascade="all"  >
        <column name="BG_ID" not-null="true" />
    </many-to-one> 

</class>
     </hibernate-mapping>

删除方法..传递父对象以删除

   public Boolean deleteBuyerGroup(BuyerGroup bg){

    try {
        session.delete(bg);
        session.getTransaction().commit();
        return true;
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
}

以下是错误

   buyerGroup.getBuyerGroupId()1

   Hibernate: update buyers set BG_ID=null where BG_ID=?
   org.hibernate.exception.ConstraintViolationException: Column 'BG_ID' cannot be null

我做了调试并确保将BG_ID设置为预期的值...请帮忙!

1 个答案:

答案 0 :(得分:1)

我认为您必须在父实体映射的all,delete-orphan属性上使用cascade值。 您还必须通过在父实体映射上设置inverse="true"来设置双向关系的责任。