我的情况非常奇怪。 我得到了A级和B级以及ManyToMany这样的关系:
的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删除所有关系('从a_b删除a_id =?) 在我的数据库中,我没有级联类型规则。 这种情况可能是什么原因?
答案 0 :(得分:0)
我唯一能想到的是你使用的是Save而不是SaveOrUpdate。是这样的吗?类注释看起来很好,还有其他一些导致问题的原因。你能发布更多信息吗?
答案 1 :(得分:0)
我认为问题在于您没有指定级联类型。默认值为CascadeType.None
,因此父ID已更改的更新不会传播给子节点,因此Hibernate将删除孤立节点。我相信您需要在属性中指定以下内容:
@ManyToMany(cascade = CascadeType.ALL) //Use whatever CascadeType fits your need
答案 2 :(得分:0)
尝试使用以下映射
<强>的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;