【发布时间】:2012-09-04 10:05:16
【问题描述】:
假设您有一个从 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中的@OneToMany-mapping上添加mappedBy会解决问题吗?)
【问题讨论】:
-
“保留他们的”是什么意思?
标签: java hibernate hibernate-onetomany