Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring JPA:如何在不丢失数据的情况下升级_Java_Spring_Spring Mvc_Spring Boot_Spring Data Jpa - Fatal编程技术网

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”。