我遇到了非常奇怪的情况。我得到了A类和B类,关系是这样的:
A.class:
@ManyToMany
@JoinTable(name="a_b",
joinColumns={
@JoinColumn(name="a_id")
}, inverseJoinColumns={
@JoinColumn(name="b_id")
}
)
private List<B> blist;
B.class:
@ManyToMany
@JoinTable(name="a_b",
joinColumns={
@JoinColumn(name="b_id")
}, inverseJoinColumns={
@JoinColumn(name="a_id")
}
)
private List<A> alist;
当我更新A类的实例时,Hibernate删除所有关系('delete from a_b where a_id=?在我的数据库中,我没有级联类型规则。这种情况的原因是什么?
我唯一能想到的是你正在使用Save而不是SaveOrUpdate。是这样吗?类注释看起来很好,但还有其他原因导致了这个问题。你能否提供更多信息?
我认为问题在于您没有指定级联类型。默认值是CascadeType.None
,因此父ID更改的更新不会传播到子节点,因此Hibernate将删除孤儿节点。我相信你需要在你的属性中指定以下内容:
@ManyToMany(cascade = CascadeType.ALL) //Use whatever CascadeType fits your need
尝试使用以下映射
A.class
@ManyToMany(targetEntity = B.class)
@JoinTable(name = "a_b",
joinColumns = @JoinColumn(name = "a_id"),
inverseJoinColumns = @JoinColumn(name = "b_id"))
private List<B> blist;
B.class
@ManyToMany(mappedBy = "blist", targetEntity = A.class)
private List<A> alist;