java - 主键值在 Spring boot 中得到更新

标签 java hibernate maven spring-boot primary-key

我使用 Spring Boot 和 MySQL 数据库创建了一个 Maven 项目。

我有两个实体类,其中一个实体类具有主键,另一个实体类具有复合主键。

Customer.java(有主键)

@Entity
public class Customer {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private String address;
    private String gstin;
    private String phoneNumber;

    @CreatedDate
    private Date createdDate;

    @LastModifiedDate
    private Date updatedDate;

//Getters and setters
}

ItemId.java(Item.java 的 Idclass)

public class ItemId implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private Long id;

    private Long billNo;
//Getters and Setters
}

Item.java(具有复合主键)

@Entity
@IdClass(ItemId.class)
public class Item {
    @Id
    private Long id;

    @Id
    private Long billNo;

    private String particular;

    private String hsnCode;

    private Double quantity;

    private String quantityUnit;

    private Double rate;

    private String rateUnit;

    private Double price;

    @CreatedDate
    private Date createdDate;

    @LastModifiedDate
    private Date updatedDate;
//Getters and setters
}

这里的问题是,当实体对象通过存储库对象持久化时,其 id 已存在于表中,Spring boot JPA 不会抛出主键 id 已存在或类似的错误。相反,尝试保留的对象的详细信息将更新为已可用的主键数据。复合主键实体也会发生同样的情况。

我这边有什么问题或者我应该做进一步的配置吗?

提前致谢。

最佳答案

如果您使用CrudRepository中的save方法,那么您需要了解,如果保存id(主键)为null的实体,那么它将生成一个新的id(根据实现自动递增)并保存记录。但是,如果在 save 方法中传递 id 已存在于数据库中的实体,那么它将更新该实体。 我希望你明白我的意思。 请看看这个article .

关于java - 主键值在 Spring boot 中得到更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58916555/

相关文章:

java - JpaRepository 查找左连接无限循环

java - JPA 惰性插入

java - 如何确定哪个 Xlint 选项对应于编译器警告?

hibernate - 如何删除双向多对多关联

Java - 从 JMenuItem 设置 JFrame 不透明度

java - 手动下载和安装maven插件

java - 使用 maven 的 RPM 包

spring - Hibernate 不创建表 postgreSQL

java - MobileFirst 8.0 安全认证的 APPLICATION_DOES_NOT_EXIST?

java - Java ProcessBuilder sudo bash 命令的正确命令格式是什么?