Spring Data JPA - 手动插入后的密钥冲突
Posted
技术标签:
【中文标题】Spring Data JPA - 手动插入后的密钥冲突【英文标题】:Spring Data JPA - Key Violation after manual insert 【发布时间】:2019-06-09 07:10:42 【问题描述】:我有一个使用 Spring Boot / hibernate 的简单项目,在单元测试中插入新值时出现错误。 对于测试,我使用带有虚拟数据的新数据库(data.sql) 启动后,当插入测试运行时,出现错误“Key Violation”:
2019-01-15 10:14:00,286 ERROR [main] org.hibernate.engine.jdbc.spi.SqlExceptionHelper: Unique index or primary key violation: "PRIMARY KEY ON PUBLIC.NATURAL_PERSON_CATEGORY(ID)"; SQL statement:
insert into natural_person_category (created_by, creation_date, deletion_by, deletion_date, modification_date, modificationd_by, comment, label, id) values (?, ?, ?, ?, ?, ?, ?, ?, ?) [23505-194]
我使用注释管理 id:@Id @GeneratedValue (strategy = GenerationType.AUTO)
当我更改我的虚拟数据的 ID(例如从 1 到 100)时,它就可以工作了......
我的 POJO:
@Data
@Entity
@Table
public class NaturalPerson
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@JsonProperty("id_natural_person")
protected Integer id;
@JsonProperty("first_name")
private String firstName;
@JsonProperty("last_name")
private String lastName;
@JsonProperty("is_minor")
private boolean isMinor;
private String mail;
@OneToMany(cascade = CascadeType.ALL)
private List<Address> addresses;
@OneToOne(cascade = CascadeType.ALL)
@JsonProperty("category")
private NaturalPersonCategory naturalPersonCategory;
@JsonProperty("is_main")
private boolean isMain;
@JsonGetter("fullname")
public String getFullname()
return this.firstName + " " + this.lastName;
@数据 @实体 @桌子 公共类地址
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@JsonProperty("id_address")
protected Integer id;
private String line1;
private String line2;
private String line3;
@JsonProperty("postal_code")
private String postalCode;
private String city;
@ManyToOne
@JoinColumn(name = "id_country")
private Country country;
@JsonProperty("start_date")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date startDate;
@JsonProperty("end_date")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date endDate;
@Data
@Entity
@Table
public class NaturalPersonCategory
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@JsonProperty("id_natural_person_category")
protected Integer id;
@NotNull
protected String label;
@Column(columnDefinition = "TEXT")
protected String comment;
【问题讨论】:
您使用的是哪个数据库? Hello H2 & MSSQL 所以您描述了解决问题的方法。问题是什么? 【参考方案1】:我已经用
解决了这个问题@GeneratedValue(strategy = GenerationType.IDENTITY)
【讨论】:
以上是关于Spring Data JPA - 手动插入后的密钥冲突的主要内容,如果未能解决你的问题,请参考以下文章
为啥手动定义的 Spring Data JPA 删除查询不会触发级联?
spring data jpa使用spring data jpa时,关于service层一个方法中进行删除和插入两种操作在同一个事务内处理