带有 Oracle DB 的 Spring JPA:我们的数据库模式有一个包含 Oracle Identity 列 (id) 和另一列作为主键 uuid 的表。我遇到的问题是在 JPARepository 上使用
save
操作时。
id NUMBER GENERATED BY DEFAULT AS IDENTITY,
UUID VARCHAR2(50 BYTE) NOT NULL ENABLE,
DOC_TYPE VARCHAR2(50 BYTE) NOT NULL ENABLE,
DESCRIPTION VARCHAR2(50 BYTE) NOT NULL ENABLE,
PRIMARY KEY (UUID)
我的实体类看起来像这样
public class Document {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "UUID", unique = true, nullable = false, updatable = false)
private String uuid;
@Column(name = "DOC_TYPE", nullable = false)
private String docType;
@Column(name = "DESCRIPTION", nullable = false)
private String description;
}
当我使用瞬态实体在 Spring Data JPA 存储库上调用
save
操作时,当正在保存的瞬态对象具有与数据库中行的 uuid 匹配的 uuid 时,我会遇到约束冲突。理想情况下,我希望将瞬态实体与持久实体合并。
数据库实体与传入实体
id: 1
uuid: sadwe-1232-123
docType: Invoice
description: Vendor inc.
id:
uuid: sadwe-1232-123
docType: Receipt
description: Vendor inc.
我明白为什么我们会看到约束冲突——因为 uuid 没有设置为 Document 类的 @Id 属性,spring 没有意识到这两个实体是相同的,并试图插入一个新实体。除了我将属性从瞬态实体映射到持久实体然后保存持久实体之外,是否有解决此问题的优雅方法?