我确实看到了所有其他类似问题,但没有一个解决方案解决了我的问题。休眠:具有相同标识符值的不同对象已与会话相关联
我有两个类:Person和PersonSynonym。一个人可以有很多同义词。在Person类的同义词属性看起来是这样的:
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "person_id")
private Set<PersonSynonym> synonyms = Sets.newHashSet();
和PersonSynonym类:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
... (getters, setters, equals, hashcode, ...)
更新Person对象,如果我只追加1个代名词了一个人正常工作。当我尝试添加第二个同义词,尝试更新的人对象我得到这个异常:
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是一个现有的已经。显然冬眠试图再次插入现有的...为什么?
更新:
移动JoinColumn到PersonSynonym没有帮助,联系人:
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "person_id")
private Set<PersonSynonym> synonyms = Sets.newHashSet();
PersonSynonym:
@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;
虽然它可能没有解决问题的根源,但您是否尝试过不同的GenerationType策略?如果你这样做会发生同样的错误吗? –
我做了,没有区别。 –