我的数据库出现了一条约束违反(FK)的错误,因为Hibernate在错误的顺序下执行级联删除。
详情:我要删除一个拥有钱包交易(value-type)的会员,而且钱包交易与产品有关联,就像会员包含产品集合一样(请参见下面的Hibernate映射)。
我要删除一个会员实例,并希望Hibernate同时删除产品和钱包交易。它似乎首先通过级联删除删除产品实例,这样就会引发FK违规,因为它仍然被钱包交易引用,而这些交易尚未通过级联删除被删除。
我已经尝试过级联设置,例如all-delete-orphan(在产品上),但没有成功。我还清空了钱包交易并在同一删除事务中刷新了Hibernate会话,但仍然出现了相同的错误。
请帮助我正确排序级联删除的顺序。以下是Hibernate映射(我省略了PK和属性之类的不重要部分):
详情:我要删除一个拥有钱包交易(value-type)的会员,而且钱包交易与产品有关联,就像会员包含产品集合一样(请参见下面的Hibernate映射)。
我要删除一个会员实例,并希望Hibernate同时删除产品和钱包交易。它似乎首先通过级联删除删除产品实例,这样就会引发FK违规,因为它仍然被钱包交易引用,而这些交易尚未通过级联删除被删除。
我已经尝试过级联设置,例如all-delete-orphan(在产品上),但没有成功。我还清空了钱包交易并在同一删除事务中刷新了Hibernate会话,但仍然出现了相同的错误。
请帮助我正确排序级联删除的顺序。以下是Hibernate映射(我省略了PK和属性之类的不重要部分):
<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>
数据库错误:
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".