例如,我有以下两个具有一对多关系的实体类:
public class A implements Serializable {
...
@OneToMany(mappedBy = "a", cascade = CascadeType.ALL)
private List<B> bs;
...
}
public class B implements Serializable {
...
@ManyToOne
private A a;
...
}
假设我的A
实例名为a
,a.bs == [b1, b2, b3]
。现在,我想删除b1
,并将b4
添加到关系中,以便a.bs == [b2, b3, b4]
和b1.a == null
。
我在em.merge(a)
之后尝试了a.setBs(b2, b3, b4)
,但这会产生a.bs == [b1, b2, b3, b4]
,除非我做了明确的b1.setA(null)
。但是,如果a.bs
发生了很大变化,并且A
与其他实体类之间存在更多的一对多关系,则会导致复杂性。设置orphanRemoval = true
也不是解决方案,因为我只想设置b1.a = null
而不是删除b1
。
这个问题一直困扰着我退出很长一段时间,任何帮助我的人都非常感激!
答案 0 :(得分:0)
您可以设置级联样式以在bs
上更新并说明
a.bs.remove(b1);
session.update(a);
这样就可以了。
您告诉ORM级联集合的更新,当您从集合中删除条目时,相应的值将无效。