【问题标题】:Hibernate 3 cascade all not deleting existing recordHibernate 3级联都没有删除现有记录
【发布时间】:2013-09-16 22:42:46
【问题描述】:

我有 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" 但它也抛出错误“A collection with cascade="all-delete-orphan" 不再被拥有实体实例引用"

【问题讨论】:

    标签: java hibernate hibernate-onetomany


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      • 2017-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-06
      • 2012-08-16
      相关资源
      最近更新 更多