我有一個實體PersonEntity,具有一個id(PERSON_ID列),一個分區鍵(TENANT_ID列)和一個AddressEntity的集合。 AddressEntity具有一個id(ADDRESS_ID),一個分區鍵(TENANT_ID)和一個字段(VALUE)。級聯刪除的主鍵和分區鍵使用休眠
這是它看起來在PersonEntity方式:
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "person", orphanRemoval = true)
public Set<AddressEntity> getAddresses() {
return addresses;
}
由於CascadeType.ALL設置,當我一個刪除一個人,就會觸發刪除地址也是如此。我使用會話的delete(Object)
方法刪除該人。
產生的SQL爲刪除這個樣子的:
delete from address where address_id=?
delete from person where person_id=?
有什麼ORM的方式來執行這個級聯刪除同時使用爲person_id和tenant_id這樣,我得到了下面的SQL生成:
delete from address where address_id=? and tenant_id=?
delete from person where person_id=? and tenant_id=?
我知道我可以簡單地使用SQL編寫所有的單個刪除操作,但是我喜歡使用Hibernate來簡化所有關聯的表刪除操作。
我想這樣做的原因是爲了確保刪除不必循環分區來查找address_id或person_id。如果我給了它tenant_id,它可以立即轉到正確的分區。
這很不幸,但我想它並沒有那麼糟糕,因爲在我們的業務工作流程中確實沒有用於跨分區查詢的用例。只需要一些額外的工作 - 謝謝。 – AHungerArtist