Я использую JPA и имею следующее:
ProductEntity
@Basic
@Column(name = "PRODUCT_ID", nullable = false, length = 128)
private String productId;
@ManyToOne
@JoinColumn(name = "PARENT_ID")
private ProductEntity parent;
Как вы можете видеть, таблица продуктов может иметь родителя.Фактически родительские дочерние отношения.
У меня есть продукт, сохраненный в базе данных, затем я добавляю несколько дочерних продуктов, каждый из которых имеет одного и того же родителя.
- Родительский продукт имеет ProductEntity parent =ноль;
Дочерние продукты имеют ProductEntity parent = родительский продукт;
ProductEntity parentProductEntity = ...
ProductEntity childProductEntity1 = ...
ProductEntity childProductEntity2 = ...
em.persist(parentProductEntity);
childProductEntity1.setParent(parentProductEntity);
childProductEntity2.setParent(parentProductEntity);
em.merge(childProductEntity1);
Данные (никогда не вставляются последние две дочерние строки)
ID PRODUCT_ID PARENT_ID
1 1 null
2 2 1
3 3 1
Проблема
Затем я пытаюсь сохранить каждый дочерний продукт.Но я получаю сообщение об ошибке, указывающее на наличие дублированного ключа (productId).При сохранении дочернего элемента он также пытается сохранить дублирующую запись родительского элемента.
Причина: org.postgresql.util.PSQLException: ОШИБКА: значение дублирующего ключа нарушает уникальное ограничение "t_osm_product_product_id_uindex"
Вопрос
Как мне изменить то, что я делаю, чтобы успешно спасти каждого ребенка?
Спасибо