我有一个实体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,当我删除一个人时,它也会触发删除该地址。我使用Session的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,它将能够立即转到正确的分区。
答案 0 :(得分:1)
请查看此answer,以获得有关在Hibernate中使用表分区的困难的更一般概述。
对于您的用例,使用其中还包含租户ID的复合ID似乎是唯一可行的解决方案。