如何有效地合并@OneToMany关系?

时间:2011-09-02 02:53:56

标签: java hibernate jpa jpa-2.0 eclipselink

例如,我有以下两个具有一对多关系的实体类:

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实例名为aa.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

这个问题一直困扰着我退出很长一段时间,任何帮助我的人都非常感激!

1 个答案:

答案 0 :(得分:0)

您可以设置级联样式以在bs上更新并说明 a.bs.remove(b1); session.update(a);

这样就可以了。

您告诉ORM级联集合的更新,当您从集合中删除条目时,相应的值将无效。