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

Java 如何有效地合并@OneToMany关系?,java,hibernate,jpa,jpa-2.0,eclipselink,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;

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

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

在执行a.setBsb2,b3,b4之后,我尝试了em.mergea,但这将导致a.bs==[b1,b2,b3,b4],除非我执行显式b1.setAnull。但是,如果a.bs变化很大,并且a与其他实体类有多个一对多关系,则这可能会导致复杂性。设置orphanRemoving=true也不是解决方案,因为我只想设置b1.a=null而不是删除b1


这个问题困扰了我很长时间,任何能帮助我的人都非常感激

您可以将级联样式设置为在bs上更新,然后说 a、 bs.1移除B1; session.a

这样就行了


您告诉ORM对集合进行级联更新,当您从集合中删除一个条目时,相应的值将为空。

是否有JPA API而不是Hibernate特定的API实现相同的功能?至少EntityManager.merge不起作用。合并操作查看一级缓存中是否有类似的对象,如果找到,则返回该对象的合并副本或将此对象添加到一级缓存并返回它。。。它不做任何级联。