当前位置: 首页 > 知识库问答 >
问题:

Spring数据JPA-手动插入后键冲突

班承恩
2023-03-14

我有一个使用Spring Boot/hibernate的简单项目,在单元测试中插入新值时有bug。对于测试,我使用了一个带有虚拟数据(data.sql)的新数据库,在启动后,当插入测试运行时,我出现了一个错误“密钥冲突”:

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(策略=GenerationType.Auto)

@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;
    }

}

@data@entity@table公共类地址{

    @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;

}

共有1个答案

湛联
2023-03-14

我已经解决了这个问题

@GeneratedValue(strategy = GenerationType.IDENTITY)
 类似资料:
  • 嗨,我是Spring Data JPA的新手,我想知道即使我将Id传递给实体,Spring data jpa也是插入而不是合并的。我想当我实现持久接口并实现这两个方法时: 它将自动合并而不是持久化。 我有一个名为User like的实体类: 再上一节课 我有一个名为UserRepostory的自定义存储库,它扩展了JpaReopistory。当我看到实现演示SpringDataJpa使用以上两种方

  • 我使用Spring Data、Spring Boot和Hibernate作为JPA提供程序,我想提高批量插入的性能。 我引用这个链接来使用批处理: http://docs.jboss.org/hibernate/orm/4.1/manual/en-US/html/ch15.html 这是我的代码和应用程序。插入分批实验的属性。 我的服务: 与批处理相关的部分application.properti

  • 我正在尝试读取包含700K条记录的Excel文件,并将这些记录批量插入MySQL数据库表中。 请注意,Excel解析速度很快,我可以在50秒左右的时间内将实体对象放入中。 我使用Spring Boot和Spring数据JPA。 下面是我的部分文件: 以及我的部分: 以下是我的 : 下面是类: 有人能告诉我我在这里做了什么不正确的事情吗? 编辑: 进程未完成并最终抛出错误:- 谢谢

  • 在我的spring boot应用程序中,我试图进行批插入以提高写入性能。问题是,我定期获得重复数据,对于这些数据,我的表上有一些唯一的约束。在进行串行插入时,我只捕获DataIntegrityException并忽略它们。但在执行批插入时,即使一次插入失败,也不会保存整个批。我希望hibernate仍然保存不会抛出错误的记录。我正在使用存储库。saveAll()用于插入,我的数据库是Mysql

  • 我将Spring Boot与Hibernate结合使用,为一个简单的web应用程序创建RESTful API,在该应用程序中,我读取一个。csv文件,并将每一行插入到mysql数据库表中。我能够成功地做到这一点,但它需要很长的时间为任何大的csv文件。我明白最好对insert语句进行批处理,以减少事务的数量,但我不认为我用当前的代码实现了这一点。这是我目前正在做的(工作,但非常缓慢): csvup

  • 我定义了2个具有单向一对多关系的实体: 在command.class中: 在StockDetails.class中: null