2013-04-03 3 views
0

Я видел все другие подобные вопросы, но ни одно из решений не решает мою проблему.Hibernate: другой объект с тем же значением идентификатора уже был связан с сеансом

У меня есть два класса: 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 отлично работает, если я добавляю только ОДИН синоним к человеку. Как только я пытаюсь добавить второй синоним и попытаться обновить лицо объекта я получаю это исключение:

Caused by: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [my.package.model.PersonSynonym#6] 

синоним с идентификатором 6 является один существующий уже. Очевидно, спящий пытается снова вставить существующий ... почему?

Update:

перемещение JoinColumn к PersonSynonym не помогает, Person:

@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 с членом (возможно, personId или getPersonId), который ссылается на родительский класс.

+0

Изменение этого не помогает, обновление лица по-прежнему вызывает вставку. Я обновил вопрос. –

Смежные вопросы

 Смежные вопросы