休眠-多对多希望再次保留数据

时间:2018-06-23 15:03:49

标签: java hibernate jpa many-to-many persist

我有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似乎没有看到先前的关系一直存在并被写入数据库,而是仍然尝试插入新记录,当然该记录属于重复键。你知道我在做什么错吗?

0 个答案:

没有答案