JPA例外保存父母/子女

Ric*_*ard 7 java database jpa

我正在使用JPA并具有以下内容:

ProductEntity 

@Basic
@Column(name = "PRODUCT_ID", nullable = false, length = 128)
private String productId;

@ManyToOne
@JoinColumn(name = "PARENT_ID")
private ProductEntity parent;
Run Code Online (Sandbox Code Playgroud)

如您所见,产品表可以有父级.有效地是父母的孩子关系.

我有一个保存在数据库中的产品,然后我添加了一些子产品,每个产品都有相同的父产品.

  • 父Product具有ProductEntity parent = null;
  • 子产品具有ProductEntity parent =父产品;

    ProductEntity parentProductEntity = ...
    ProductEntity childProductEntity1 = ...
    ProductEntity childProductEntity2 = ...
    
    em.persist(parentProductEntity);
    childProductEntity1.setParent(parentProductEntity);
    childProductEntity2.setParent(parentProductEntity);
    em.merge(childProductEntity1);
    
    Run Code Online (Sandbox Code Playgroud)

数据(它永远不会插入最后两个子行)

    ID        PRODUCT_ID     PARENT_ID
     1           1              null
     2           2                1
     3           3                1
Run Code Online (Sandbox Code Playgroud)

问题

然后我尝试保存每个孩子的产品.但是我收到一个错误,表明存在重复键(productId).保存子项时,它也会尝试保存父项的重复项.

引起:org.postgresql.util.PSQLException:错误:重复键值违反唯一约束"t_osm_product_product_id_uindex"

我如何改变我正在做的事情来成功保存每个儿童产品?

谢谢

Sah*_*lık 0

你可以试试@ManyToOne(cascade=CascadeType.MERGE)