假设您有一个从 A 类到 B 类的单向一对多关联,如下所示:
public class A {
@OneToMany(cascade = CascadeType.ALL)
private List<B> myBs;
}
public class B {
//I know nothing about A
}
在数据库中,这些通过第三个表连接,保留它们的 ID。
现在,我想删除一个连接到 A 的 B 对象。A 有自己的存储库类,B 有自己的存储库类。
在我的项目中以类似设置完成此操作的方式是首先要求有问题的 A 删除有问题的 B,然后告诉EnitityManager
从数据库中删除 B。
这让我有点卡在两个选择之间,在我看来它们都不是最佳选择:
中的存储库方法
BRepository
处理从其连接的 A 中删除 B 以及通过EntityManager
. 我不喜欢这样,因为 B 的存储库类将不得不操作 A 对象。BRepository 中的存储库方法仅处理通过 EntityManager 进行的删除,由调用者将其从 A 的集合中删除。我更不喜欢这个,因为如果有人在没有先从 A 的集合中删除 B 的情况下调用存储库,它将严重失败。
在这两个中,我发现第一个是迄今为止最好的。但是,我真的不认为它是干净的。
Hibernate 中是否有一些构造允许在从数据库中删除时从它所属的任何集合中删除要删除的项目?(试图只删除 B 失败,因为包含它的 A 也加载到同一个事务中,所以它在事务结束时失败,当它试图存储被删除的东西时。)
(在 A 中添加会mappedBy
解决@OneToMany-mapping
问题吗?)