Hibernate 使用二级缓存休眠双向多个更新

Hibernate 使用二级缓存休眠双向多个更新,hibernate,Hibernate,我有一个双向多对多类: public class A{ @ManyToMany(mappedBy="listA") private List<B> listB; } public class B{ @ManyToMany private List<A> listA; } 在我对集合a.ListB启用二级缓存之前,这一切都可以正常工作。现在,当我更新B中的列表时,a.listB不会得到更新,并且仍然过时 你怎么避开这个 谢谢, Dwayne您是否正确设置了A和B之

我有一个双向多对多类:

public class A{
 @ManyToMany(mappedBy="listA")
 private List<B> listB;
}
public class B{
 @ManyToMany
 private List<A> listA;
}
在我对集合a.ListB启用二级缓存之前,这一切都可以正常工作。现在,当我更新B中的列表时,a.listB不会得到更新,并且仍然过时

你怎么避开这个

谢谢,
Dwayne

您是否正确设置了A和B之间双向链路的两侧?一种典型的方法是使用如下防御方法:

public class B {
    @ManyToMany
    private List<A> listA;

    public void addToListA(A a) {
        this.listA.add(a);
        a.getListB().add(this);
    }

    public void removeFromListA(A a) {
        this.listA.remove(a);
        a.getListB().remove(this);
    }
}
公共B类{
@许多
私人名单清单a;
公共无效地址(A){
本.列表a.加入(a);
a、 getListB()。添加(此);
}
从列表中删除公共无效A(A){
此.listA.remove(a);
a、 getListB()。删除(此);
}
}

这将是一件困难的事情,因为我从一个客户端获得更新,他们将列表发送到B中。也就是说,我需要调用B.setListA(listA)。@DD以及如何为
listA
的所有元素将引用设置为
B
?我不会停留在上面的解决方案是唯一的方法,但如果你不这样做,你的双向关联将被破坏,这可能解释了你看到的奇怪行为。我不会在两端更新关联…除了缓存之外,它似乎都可以正常工作。如果我不想使用加法和减法(这会很困难,因为我要处理的是更新列表而不是添加/减去对象),我会怎么做?我想我可以使用单向关联,并在另一端使用查询。而且我也不太明白,如果只有一个端是持久的,为什么你需要更新两端?hibernate是否意识到,即使我没有在特定对象上调用save,在刷新时也更改了反方向?@DD有关此对象的背景信息,请检查。你当前的实现被破坏了。是的……我真的看不出更新另一面有什么意义……它没有被持久化,我需要时会重新加载对象。如果我只是放入一些垃圾,比如总是将另一端设置为null,那么这会告诉hibernate使缓存过期。
public class B {
    @ManyToMany
    private List<A> listA;

    public void addToListA(A a) {
        this.listA.add(a);
        a.getListB().add(this);
    }

    public void removeFromListA(A a) {
        this.listA.remove(a);
        a.getListB().remove(this);
    }
}