2016-12-01 159 views
2

我有一个下面的学生实体,我想只更新非空字段,当我调用CrudRepository保存方法。例如;如何仅使用spring jpa存储库更新特定字段?

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; 
    .... 
} 
+0

使用saveOrUpdate方法.. – Jobin

+0

@Jobin保存方法也将更新现有记录。我不明白你的意思? – hellzone

+0

如果您想要编辑,请加载现有实体并更新相关字段。不要使用相同的标识符创建一个新的。就那么简单。 –

回答

2

我有一个学生在下面的实体,我想,当我打电话CrudRepository保存方法只更新不空 领域。

你不能这样做,是因为当你提供弹簧或JPA的更新操作的实体,他们无法猜测为什么这个实体的某些字段为空:是null因为你想设置该字段为空?或者是null,因为您尚未完成此字段,但您不希望现有值被覆盖?
因此,他们不会制作调色板,只需更新实体字段中有效值的行。

所以,你应该写一个JPQL查询,您明确字段更新:

UPDATE Student e SET e.name=%1 AND e.number=%2 
WHERE ... 
相关问题