收集仍然存在,但不会出现在另一方

时间:2013-07-07 22:33:16

标签: java hibernate many-to-many

我在Hibernate中有多对多的关系。当我将一个objectA与两个objectsB关联时,objectA.getObjectB()成功返回两个元素(包括数据库),但objectB.getObjectA()不返回objectA。只有在新会议开始后才能运作。

@Entity
public class ObjectA implements java.io.Serializable {

    private List<ObjectB> objectsB;

    ...

    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinTable(name = "db_objectA_objectB", joinColumns = {
        @JoinColumn(name = "idObjectA", updatable = false)}, inverseJoinColumns = {
        @JoinColumn(name = "idObjectB", updatable = false)})
    public List<ObjectB> getObjectsB() {
        return objectsB;
    }

    public void setObjectsB(List<ObjectB> objectsB) {
        this.objectsB = objectsB;
    }
}

@Entity
public class ObjectB implements java.io.Serializable {

    private List<ObjectA> objectsA;

    ...

    @ManyToMany(fetch = FetchType.EAGER, mappedBy = "objectsB", cascade = CascadeType.ALL)
    public List<ObjectA> getObjectsA() {
        return objectsA;
    }

    public void setObjectsA(List<ObjectA> objectsA) {
        this.objectsA= objectsA;
    }
}

1 个答案:

答案 0 :(得分:1)

保持关系的双方一致是应用程序代码的责任,而不是Hibernate的责任。在JPA 2.0规范中,用以下词语告知:

  

请注意,应用程序负责   保持运行时关系的一致性 - 例如,   确保双向的“一”和“多”两面   申请时,关系是彼此一致的   在运行时更新关系。