2017-04-27 4 views
1

に参加カスケード削除されません。これまでのところ、SELECTのためにうまく動作します。休止5 + JPA 2を超える私たちは、この関係を持っているテーブル

は今JQLクエリ

DELETE FROM RuleProviderEntity WHERE ... 

あります。しかし、これはRuleEntity行を削除するカスケード接続に失敗しました。 RuleProviderEntityを削除し、RuleEntityをそのまま残します。

これはJPA 2で動作するはずですが、これはHibernateのバグですか、設定に何か不足していますか?

私は@JoinTableを追加することができますが、それはデフォルトを上書きするだけです。
orphanRemovalもここでは必要ないようです。
@PreRemoveで回避策を講ずることはできますが、その方法はわかりません。

答えて

3

JPQL Bulk Deleteクエリが発行されたことを意味しますか? em.remove()ではなく

一括削除クエリは、カスケードセマンティクスを尊重するものではなく、管理対象オブジェクトをメモリ内のデータストアと一貫性を保つことも目的としていません。カスケードしたい場合はem.remove()に電話する必要があります。 JPA仕様のこの外観について不明な点がある場合は、

+0

ありがとうございました。私はこれまで一括削除を使用していないので、私は知らなかった:)しかし、私は仕様がカスケード接続を必要としないことに非常に驚いている。 –

+0

私の考え方は次のようになります: 'RuleEntityProvider'と同じセットがバルクの' DELETE'とマッチするエンティティが存在する可能性があります。それに対して 'em.remove()'を呼び出すとカスケードし、3番目のネストされた 'RuleEntity'エンティティも削除されます。ですから、なぜDELETEステートメントからカスケードしないのでしょうか。 –

+0

カスケードがオプションでなければならない理由を理解してください。一括削除とは、データストアからデータを取り出すことなく一括処理を行うことです。カスケードするには、JPAプロバイダがすべてのオブジェクトを削除し、カスケードを処理してから削除する必要があります。 –

関連する問題