唯一正确的方法是第一种:
@ManyToMany(mappedBy = "users")public Set<Title> getTitles() { return titles;}...@ManyToMany@JoinTable(name = "tb_title_user",joinColumns = @JoinColumn(name = "title_id"),inverseJoinColumns = @JoinColumn(name = "user_id"))public Set<User> getUsers() { return users;}反面使用该
mappedBy属性说:“我是反面。请查看
users目标实体中的属性,以查看此关联如何映射。”
您在做错的是,您只能在测试中修改反面。JPA / Hibernate仅考虑所有者方是否知道关联。所以不要做
user.getTitles().add(title);
你应该做
title.getUsers().add(user);
甚至两者都做,以确保对象图是连贯的。
我真的希望这个方法可以作为类似问题的参考,但是我对此表示怀疑,因为我已经回答了无数次此问题,并且它一遍又一遍地出现,尽管在文档中已明确说明:
如果关联是双向的,则一侧必须是所有者,而一侧必须是反向端(即,在更新关联表中的关系值时,它将被忽略):
[遵循一个示例,该示例在双向多对多关联的每一侧都带有适当的注释]



