Hibernate:具有相同标识符值的不同对象已与会话关联

Hibernate:具有相同标识符值的不同对象已与会话关联,hibernate,persistence,one-to-many,Hibernate,Persistence,One To Many,我确实看到了所有其他类似的问题,但没有一个解决方案能解决我的问题 我有两类:Person和PersonSynonym。一个人可以有很多同义词。Person类中的同义词属性如下所示: @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) @JoinColumn(name = "person_id") private Set<PersonSynonym> synonyms = Sets.newHashSet();

我确实看到了所有其他类似的问题,但没有一个解决方案能解决我的问题

我有两类:Person和PersonSynonym。一个人可以有很多同义词。Person类中的同义词属性如下所示:

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "person_id")
private Set<PersonSynonym> synonyms = Sets.newHashSet();
如果我只为一个人添加一个同义词,那么更新Person对象就可以了。当我尝试添加第二个同义词并尝试更新person对象时,就会出现以下异常:

Caused by: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [my.package.model.PersonSynonym#6]
id 6的同义词是已经存在的同义词。显然hibernate试图再次插入现有的。。。为什么?

更新:

将JoinColumn移动到PersonSynonym没有帮助,Person:

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "person_id")
private Set<PersonSynonym> synonyms = Sets.newHashSet();

@JoinColumn
属性位于错误的一侧。它必须与引用父类的成员(可能是
personId
getPersonId
)一起位于
PersonSync
类中。

更改它没有帮助,更新person仍然会触发插入。我已经更新了这个问题。虽然它可能无法触及问题的根源,但您是否尝试过不同的世代策略?如果你这样做,是否也会发生同样的错误?是的,没有区别。
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "person_id")
private Set<PersonSynonym> synonyms = Sets.newHashSet();
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String name;

private Long person_id;

@ManyToOne
@JoinColumn(name = "person_id", referencedColumnName = "id", insertable = false, updatable = false)
private Person person;