gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:52:00 25 4
gpt4 key购买 nike

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

最佳答案

看看这个 answer有关在 Hibernate 中使用表分区的困难的更全面的概述。

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

关于java - 使用Hibernate按主键和分区键级联删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42565125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com