我有User类,我想在其中引用ManyToMany关系-particalury我正在解决一个用户可以关注/被另一个用户关注的问题。不需要其他属性,因此它应该是一个带有复合主键的表。这是它的注释方式:
@ManyToMany(cascade = {CascadeType.ALL, CascadeType.MERGE})
@JoinTable(name = "user_followers", joinColumns = { @JoinColumn(name = "follower") }, inverseJoinColumns = { @JoinColumn(name = "following") })
private Set<User> following = new HashSet<User>();
@ManyToMany(mappedBy = "following")
private Set<User> followers = new HashSet<User>();
一切都很好-生成了表格,PK是 follower_following 的组合。当我第一次尝试保留数据时,它可以工作-执行insert语句。但是第二次,它仍然试图插入先前执行的关系(显然是不相同的关系),我得到:
Unexpected RuntimeException
Last cause: Duplicate entry 'follower-following' for key 'PRIMARY'
// EDIT: There are correct FK keys instead of follower-following
这是我添加关注者并保留用户的方式:
if (!user.following.contains(toFollowUser)) {
user.following.add(toFollowUser);
}
if (session.contains(user)) {
session.persist(user);
} else {
session.merge(user)
}
session.getTransaction().commit(); // HERE I get exception
从我的角度来看,Hibernate似乎没有看到先前的关系一直存在并被写入数据库,而是仍然尝试插入新记录,当然该记录属于重复键。你知道我在做什么错吗?