级联删除的主键和分区键使用休眠

问题描述:

我有一个实体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,它可以立即转到正确的分区。

看看这个answer为更全面的概述使用Hibernate使用表分区的困难。

对于您的使用案例,使用包含tenant id的复合id似乎是唯一可能的解决方案。

+0

这很不幸,但我想它并没有那么糟糕,因为在我们的业务工作流程中确实没有用于跨分区查询的用例。只需要一些额外的工作 - 谢谢。 – AHungerArtist