我使用 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/