Hibernate 3级联所有不删除现有记录

时间:2013-09-16 22:42:46

标签: java hibernate hibernate-onetomany

我有3个班级A,B和C.而且关系是:

  1. 从A到B的一对多双向。
  2. C延伸B.
  3. 我可以添加新记录并编辑地址集的现有记录,但我无法删除任何现有记录。

    更新对象的代码

    currentObj = getSession().merge(currentObj);
    

    映射:

    1. Address.hbm.xml

      <joined-subclass name="test.domain.ParticipantAddress"
              table="PARTICIPANT_ADDRESS"
              dynamic-update="false"
              dynamic-insert="false"
              lazy="true"
          >
          <key
              column="IDENTIFIER"
          />
          <many-to-one name="participant" class="test.domain.Participant"
              column="PARTICIPANT_ID" not-null="false" cascade="none" unique="true"/>
      
           <property
              name="sortOrder"
              type="long"
              update="true"
              insert="true"
              column="sortOrder"
              length="255"
          />
          </joined-subclass>
      
    2. Participant.hbm.xml

          <list name="addressCollection" table="PARTICIPANT_ADDRESS"
          lazy="false"
          inverse="true"
          cascade="all">
              <cache usage="read-write"/>
              <key column="PARTICIPANT_ID"/>
              <list-index column="sortOrder"/>
              <one-to-many class="test.domain.ParticipantAddress"/>
      </list>
      
    3. 我也尝试过使用cascade =“all,delete-orphan”,但它也会抛出错误“A collection with cascade =“all-delete-orphan”不再被拥有实体实例“

      引用

1 个答案:

答案 0 :(得分:0)

检查表B中的外键约束,如果它不允许在B之前删除A,那么您将看到此行为。请记住,无论你在hibernate上做什么都将被翻译成SQL DML / DDL