【发布时间】:2019-05-08 22:59:22
【问题描述】:
我正在使用 JPA 并且有以下内容:
ProductEntity
@Basic
@Column(name = "PRODUCT_ID", nullable = false, length = 128)
private String productId;
@ManyToOne
@JoinColumn(name = "PARENT_ID")
private ProductEntity parent;
如您所见,产品表可以有父表。实际上是父子关系。
我在数据库中保存了一个产品,然后我添加了一些子产品,每个子产品都有相同的父产品。
- 父产品有ProductEntity parent = null;
-
子产品有 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: ERROR: duplicate key 值违反了唯一约束“t_osm_product_product_id_uindex”
问题
我必须如何更改我正在执行的操作才能成功保存每个子产品?
谢谢
【问题讨论】:
-
如果你设置了子产品的父级,你能显示你的代码吗?
-
@RezaNasiri 谢谢,我已经更新了上面的解释。
-
好像没问题,你用什么策略生成主键?
-
该表有一个PK ID(自增)和一个唯一约束PRODUCT_ID(由代码生成,但始终唯一)。
-
你需要用“@Id”而不是“@Basic”来注释你的PK