使用 Hibernate 按主键和分区键级联删除

Cascade deletes by primary key and partition key using Hibernate

我有一个实体 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 来处理所有关联的 table 删除的简单性。

我这样做的原因是为了确保删除不必遍历分区来查找 address_id 或 person_id。如果我给它 tenant_id,它就能立即转到正确的分区。

查看此 以更全面地了解在 Hibernate 中使用 table 分区的困难。

对于您的用例,使用其中还包含租户 ID 的复合 ID 似乎是唯一可能的解决方案。