Java 主键值在Spring boot中得到更新
我使用SpringBoot和MySQL数据库创建了一个maven项目 我有两个实体类,一个实体类中有一个主键,另一个实体类中有一个复合主键 java(具有主键) java(Item.java的Idclass) java(具有复合主键) 这里的问题是,当实体对象通过repository对象持久化时,其id已经存在于表中,Spring boot JPA不会抛出主键id已经存在的错误或类似的错误。相反,尝试持久化的对象的详细信息将更新为已经可用的主键数据。复合主键实体也是如此 我这边有什么问题吗?或者我应该怎么做Java 主键值在Spring boot中得到更新,java,hibernate,maven,spring-boot,primary-key,Java,Hibernate,Maven,Spring Boot,Primary Key,我使用SpringBoot和MySQL数据库创建了一个maven项目 我有两个实体类,一个实体类中有一个主键,另一个实体类中有一个复合主键 java(具有主键) java(Item.java的Idclass) java(具有复合主键) 这里的问题是,当实体对象通过repository对象持久化时,其id已经存在于表中,Spring boot JPA不会抛出主键id已经存在的错误或类似的错误。相反,尝试持久化的对象的详细信息将更新为已经可用的主键数据。复合主键实体也是如此 我这边有什么问题吗?或者
提前感谢。如果您正在使用
crudepository
中的save
方法,那么您需要了解,如果保存id(主键)为null的实体,那么它将生成一个新id(根据实现自动递增)并保存记录。但是,如果在save
方法中传递了数据库中已存在的id为的实体,则该实体将更新该实体。
我希望你明白我的意思。
请看一下。如果您使用
crudepository
中的save
方法,那么您需要了解,如果保存id(主键)为null的实体,那么它将生成一个新id(根据实现自动递增)并保存记录。但是,如果在save
方法中传递了数据库中已存在的id为的实体,则该实体将更新该实体。
我希望你明白我的意思。
请看一看。您使用哪种方法进行持久化?您使用哪种方法进行持久化?是否有一种方法会返回重复id的异常?@PradeepKr您可以检查数据库中是否已经存在该id,并自行引发异常。我不确定其他机制。是否有一种方法会返回重复id的异常?@PradeepKr您可以检查数据库中是否已经存在该id,然后自己引发异常。我不确定其他机制。
@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
}
public class ItemId implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private Long id;
private Long billNo;
//Getters and Setters
}
@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
}