Я видел все другие подобные вопросы, но ни одно из решений не решает мою проблему.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;
Может быть, вы не можете решить эту проблему, если вы пробовали разные стратегии GenerationType? Произошла ли такая же ошибка, если вы это сделаете? –
я, нет разница. –