0

我有 3 个 A、B 和 C 类。它们之间的关系是:

  1. 从 A 到 B 的一对多双向。
  2. C 扩展 B。

我可以添加新记录并编辑地址收集的现有记录,但我无法删除任何现有记录。

更新对象的代码

currentObj = getSession().merge(currentObj);

映射:

  1. 地址.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. 参与者.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>
    

我也尝试使用 cascade="all,delete-orphan" 但它也抛出错误“拥有的实体实例不再引用具有 cascade=”all-delete-orphan” 的集合”

4

1 回答 1

0

检查表 B 中的外键约束,如果它不允许在 B 之前删除 A,那么你会看到这种行为。请记住,您在 hibernate 上所做的任何事情都将被转换为 SQL DML/DDL

于 2013-09-16T22:48:17.290 回答