如何使用spring jpa存储库仅更新特定字段?

时间:2016-12-01 11:55:38

标签: java spring jpa spring-data-jpa

我有一个以下的Student实体,当我调用CrudRepository save方法时,我想只更新非空字段。例如;

Student student = new Student();
student.setName("test");
student.setNumber("32323");
studentRepository.save(student); 

当我调用save方法时它还将地址字段更新为空值。我想要做的是"如果它具有空值,则不要更新"。有没有办法做到这一点?

@Entity
@Table(name = "student")
public class Student implements Serializable{

    @Id
    @Column
    private String name;

    @Column
    private String number;

    @Column
    private String address;
    ....
}

1 个答案:

答案 0 :(得分:2)

  

我有一个以下的Student实体,我想只更新not null   我调用CrudRepository保存方法的字段。

您不能以这种方式执行此操作,因为当您向Spring或JPA提供实体以进行更新操作时,他们无法猜测为什么此实体的某些字段为空:是null因为您想要将字段设置为null?或者是null,因为您尚未完成此字段,但您不希望覆盖现有值?
因此,他们不会制作guesworks,只需在您实体的字段中使用有效值更新行。

因此,您应该编写一个JPQL查询,在其中显示要更新的显式字段:

UPDATE Student e SET e.name=%1 AND e.number=%2
WHERE ...