jpa用自动递增主键覆盖记录

c9x0cxw0  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(512)

我找过了,但什么也没找到。我有一个实体类,如下所示:

@Entity
public class Report {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;
    @Column(name = "descrizione")
    private String descrizione = null;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getDescrizione() {
        return descrizione;
    }

    public void setDescrizione(String descrizione) {
        this.descrizione = descrizione;
    }   
}

和一个表到mysql数据库与自动增量pk。但是我不知道为什么只有当我启动web服务时自动增量才起作用。稍后,hibernate只覆盖最后一条记录,而不使用自动递增的主键创建新记录。
在application.properties中,我有以下配置:

spring.jpa.hibernate.ddl-auto=none
spring.datasource.url=jdbc:mysql://localhost:3306/civicsense?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=AAAAAAA

我们会很感激你的帮助

6bc51xsx

6bc51xsx1#

您需要更改: @GeneratedValue(strategy = GenerationType.IDENTITY) 对于 @GeneratedValue(strategy = GenerationType.AUTO) 在application.properties中使用: spring.jpa.hibernate.ddl-auto=update

pb3s4cty

pb3s4cty2#

首先,将int改为long。您可以省略这个策略,因为对于mysql GenerationType.IDENTITY 与相同 GenerationType.AUTO 相当于加上 @GeneratedValue .

@Id @GeneratedValue
private Long id;

另外,您的问题可能是添加实体的方式。你可能想用 saveAndFlush() 在这种情况下,由于更改将在该命令中立即刷新到db,这可能会阻止您的问题,因为您的实际方法可能没有按时提交。

相关问题