我有两个具有一对一关系的实体,A 和 B。B 实体是可选的,可以自行更新和删除,但必须始终链接到 A 的实例。
所以我有两个 JPA 实体,A 和 B 具有双向关系。这是从A到B的那个。
@OneToOne(mappedBy = "a", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
我可以创建 A 和 B,删除 A 并且都被删除。好的。
但是由于从 A 到 B 的级联,如果我em.remove(b)
删除不会持久化。即使我先做a.setB(null)
。
在保持级联的同时删除可选实体的唯一方法似乎是使用新的 JPA2 功能,orphanRemoval=true。调用a.setB(null)
,然后坚持 A。
这意味着我不能直接对 B 进行操作,这意味着组合关系太强,对 B 的所有操作都必须通过 A 完成。
但是 B 不是嵌入式对象,它本身就是一个成熟的实体,我怎样才能独立于 A 删除它?
最好的方法似乎是删除级联,并强制用户确保在删除 A? 由 B 表中的 FK 约束强制执行。
这是一个直截了当的案例。两个相关实体,这种关系一方面是可选的,另一方面是强制性的。
哦,这是休眠 4.2.3-Final