私は、ID(PERSON_ID列)、パーティションキー(TENANT_ID列)、およびAddressEntityのコレクションを持つエンティティPersonEntityを持っています。 AddressEntityには、ID(ADDRESS_ID)、パーティションキー(TENANT_ID)、およびフィールド(VALUE)があります。Hibernateを使用した主キーとパーティションキーによるカスケード削除
これは、それがPersonEntityに見える方法です:私は人を削除するとCascadeType.ALLが、設定されているので
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "person", orphanRemoval = true)
public Set<AddressEntity> getAddresses() {
return addresses;
}
、それは同様にアドレスを削除トリガー。その人を削除するには、セッションのdelete(Object)
メソッドを使用します。
それはこのようになります削除の結果のSQL:
delete from address where address_id=? and tenant_id=?
delete from person where person_id=? and tenant_id=?
:
delete from address where address_id=?
delete from person where person_id=?
が、これはPERSON_IDの両方を使用して、カスケード削除と私は生成され、以下のSQLを取得するようtenant_id実行するための任意のORMの方法はあります
SQLを使用して個々の削除をすべて書き込むことができますが、Hibernateを使用して関連するすべてのテーブルの削除を簡単に処理するのが好きです。
私がこれをやりたい理由は、deleteがaddress_idまたはperson_idを見つけるためにパーティションをループする必要がないことを保証するためです。私がtenant_idにそれを与えたら、すぐに正しいパーティションに行くことができます。
これは残念ですが、実際には私たちのビジネスワークフローでパーティション間のクエリのユースケースがないので、それほど悪くないと思います。ちょうど余分な仕事を取るだろう - ありがとう。 – AHungerArtist