2013-04-03 38 views
0

我确实看到了所有其他类似问题,但没有一个解决方案解决了我的问题。休眠:具有相同标识符值的不同对象已与会话相关联

我有两个类: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; 
+0

虽然它可能没有解决问题的根源,但您是否尝试过不同的GenerationType策略?如果你这样做会发生同样的错误吗? –

+0

我做了,没有区别。 –

回答

0

@JoinColumn属性是错误的一边。它必须位于PersonSynonym类中,其成员(可能是personIdgetPersonId)引用父类。

+0

更改它并没有帮助,更新人员仍然触发插入。我已经更新了这个问题。 –

相关问题