首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Hibernate以错误的顺序执行删除级联

Hibernate以错误的顺序执行删除级联
EN

Stack Overflow用户
提问于 2014-06-03 17:36:13
回答 2查看 1.9K关注 0票数 4

我的数据库抛出了一个Constraing violation (FK),因为Hibernate以错误的顺序执行级联删除。

详细信息:我删除了一个成员,该成员拥有一个带有Wallet事务(值类型)的Wallet,并且该wallet事务具有与某个产品的关联,就像该成员包含产品集合一样(请参阅下面的Hibernate映射)。

我删除了一个成员实例,并希望Hibernate删除产品和钱包事务。它似乎首先删除了产品实例(通过级联),这样数据库就会抛出FK冲突,因为它仍然被Wallet事务引用,但尚未删除(通过级联)

我使用了级联设置,如all-delete-orphan (在产品上)等,但不幸的是,我还清空了钱包事务,并在相同的删除事务中刷新了hibernate会话,但也出现了相同的错误。

请理解并帮助获得正确的级联删除顺序?

hibernate映射(我省略了PK和属性等不重要的部分):

代码语言:javascript
运行
复制
<class name="Member" table="mem" >
 <component name="wallet" class="Wallet">
  <set name="transactions" table="wallet_tx" cascade="all">
   <cache usage="read-write" />
   <key column="idTaxer" not-null="true" />
   <composite-element class="WalletTransaction">
    <property name="amount" type="big_decimal" column="amount" />
    <many-to-one name="product" column="idPrdInst" class="Product" cascade="none" />
   </composite-element>
  </set>
 </component>

 <set name="products"  cascade="delete" inverse="true">
  <key column="idTaxer" not-null="true" />
  <one-to-many class="Product" />
 </set>
</class>

<class name="Product" table="prd" >
 ...
 <many-to-one name="member" column="idMember" class="Member" cascade="none" />
</class>

数据库错误:

代码语言:javascript
运行
复制
ERROR:  update or delete on table "prd" violates foreign key constraint "fk_1umej7" on table "wallet_tx"
DETAIL:  Key (id)=(75bef42fc4544) is still referenced from table "wallet_tx".
EN

回答 2

Stack Overflow用户

发布于 2014-06-06 20:29:23

如果您清空钱包事务并希望将其删除,则必须在事务关系上设置delete-orphan。

如果产品仍然先被删除,您可以在从事务集中删除钱包tx后进行刷新,这将会起作用,但这肯定不是最先进的方式。

否则,您可以尝试映射产品-事务oneToMany关系,并在其上设置delete级联(使用反向),因此产品删除将首先触发事务删除。

票数 1
EN

Stack Overflow用户

发布于 2014-06-07 12:29:06

而不是:

代码语言:javascript
运行
复制
<set name="transactions" table="wallet_tx" cascade="all">

你应该有:

代码语言:javascript
运行
复制
<set name="transactions" table="wallet_tx" cascade="all-delete-orphan">

并且只需在删除成员父实体之前清除事务集。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24011759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档