Java Spring JPA:如何在不丢失数据的情况下升级
有没有办法在不存在的情况下插入新记录,并在不丢失旧数据的情况下更新记录 这是我的服务层方法:Java Spring JPA:如何在不丢失数据的情况下升级,java,spring,spring-mvc,spring-boot,spring-data-jpa,Java,Spring,Spring Mvc,Spring Boot,Spring Data Jpa,有没有办法在不存在的情况下插入新记录,并在不丢失旧数据的情况下更新记录 这是我的服务层方法: public void saveSample(Sample sample) { Sample samplePersistent = sample; if (sample.getId() != null) { samplePersistent = sampleRepository.findOne(sample.getId()); Assert.notNul
public void saveSample(Sample sample) {
Sample samplePersistent = sample;
if (sample.getId() != null) {
samplePersistent = sampleRepository.findOne(sample.getId());
Assert.notNull(samplePersistent, "Sample entity not found with id : " + sample.getId());
samplePersistent.setLocation(sample.getLocation());
samplePersistent.setName(sample.getName());
samplePersistent.setType(sample.getType());
...
...
}
samplePersistent.cloneAuditingInfoFrom(sample);
sampleRepository.save(sample);
}
我认为这是无用的方式
Spring BeanUtils类或@DynamicUpdate注释可以解决我的问题吗?因为您已经在使用Spring和Spring数据Jpa调用
samplePository.save(示例)代码>就足够了。方法首先根据实体的标识值检查传入的实体是新实体还是现有实体。标识由实体的主键定义
您也可以使用这个方法。但由于您已经在使用Spring数据,save方法将在内部调用merge方法
在我看来,您不需要使用@DynamicUpdate
,除非您需要更新的字段太多,但实际更新的字段却很少,而且对其他表也有很多限制
SpringBeanutils与对象持久性无关。它主要用于执行JavaBean特定的操作,如复制属性、查找bean的方法、获取属性描述符等
附言:因此您不需要检查sample.getId()
是否为null,并使用findOne
方法从数据库中获取记录。只需传递samplePository.save(sample)
即可保存/更新记录。我也有同样的问题,但在保存之前我还需要更新某些字段。看看这个问题。就我而言,合并不起作用。我有一个实体User
,它有三个字段-id
(自动生成的主键)、mobile
(必需)和name
。对于id为1的用户,数据库中已经有一个条目(id=1,mobile=“7777”),现在我想添加name
,我正在用户(id=1,name=“James”)上为其执行save()
,但它给我错误提示“Column'mobile'不能为null”。