2017-03-02 92 views
1

我有一個實體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和ten​​ant_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,它可以立即轉到正確的分區。

回答

1

看看這個answer爲更全面的概述使用Hibernate使用表分區的困難。

對於您的使用案例,使用包含tenant id的複合id似乎是唯一可能的解決方案。

+0

這很不幸,但我想它並沒有那麼糟糕,因爲在我們的業務工作流程中確實沒有用於跨分區查詢的用例。只需要一些額外的工作 - 謝謝。 – AHungerArtist