Я всегда получаю следующую ошибку:
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '2-1' for key 'PRIMARY'
Error Code: 1062
Call: INSERT INTO ENTITY_ENTITY (relationships_ID, Entity_ID) VALUES (?, ?)
bind => [1, 2]
Query: DataModifyQuery(sql="INSERT INTO ENTITY_ENTITY (relationships_ID, Entity_ID) VALUES (?, ?)")
Мои классы выглядят так:
@javax.persistence.Entity
public class Entity {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
protected Long id;
@Column(nullable=false, updatable=false)
protected String name;
@OneToMany(cascade=CascadeType.MERGE)
protected Collection<Entity> relationships = new ArrayList<Entity>();
}
Один экземпляр этого класса может ссылаться на другие экземпляры того же типа (self-referencing).Теперь при создании одного экземпляра, который ссылается на другой, все работает нормально.Но проблема в том, что когда такой экземпляр (отсоединенный - я не совсем уверен, потому что экземпляр редактируется с помощью формы Facelets) обновляется, то есть имя, то путем выполнения операции слияния EntityManager исключение - как упомянуто выше -
РЕДАКТИРОВАТЬ:
1. Создайте один экземпляр сущности (например, E1).
2. Сохраните E1 через em.persist (E1).
3. Позже создайте еще один экземпляр Entity (E2), который переопределяет E1 через свойство Relations .
4. И сохраните E2: em.persist (E2).
-- До сих пор все отлично работает.
Загрузите для просмотра всех сохраненных экземпляров сущности и выберите E2 для редактирования (через веб-интерфейс Facelet). Измените, например, имя E2. Чтобы сохранить изменения: Вызовите em.merge (E2).
--- Теперь выдается исключение!
END EDIT
Что не так с моим кодом?Пожалуйста, помогите мне !!!