spring-Data-Jpa如何保存实体的个别几个字段呢?

在一个实体中,有三十几个字段,但只需要保存其中的几个。如何实现呢?现在,我把改变的几个字段写道这个实体中,用了saveAndFlush(),那些不需要修改的变成了null了。而保存到数据库也是null。怎么做呢?用spring-data-jpa的。

阅读 10k
3 个回答

在你的实体上加个注解org.hibernate.annotation.DynamicUpdate

@Entity
@DynamicUpdate
public class XXX {
    ...
}

不知道题主是不是在spring-boot中使用spring-data-jpa
如果是的话,可以看这里,我之前也被这个问题困扰过
https://segmentfault.com/q/10...

至于@DynamicUpdate@DynamicInsert,至少我这边试过没有用(spring-boot中)

新手上路,请多包涵

@DynamicUpdate的作用并不是更新指定字段,而是更新变化的字段;
数据库中表字段对应到对象中的成员变量,如果请求过来的字段被封装成对象再去使用save()方法,请求url中没有涉及到的字段默认为null,如果这个字段在数据库中已经有值了当然会被null覆盖,因为,你save()的对象中这个字段跟数据库中的值不同。解决方法大概两种,一是自己写一个方法先findOne查出原有值再把不想变化的字段塞回要save()的对象中,二是使用SQL语句。刚接触JPA,遇到了这个问题,看到上面回答顺手写一下,或许能给其他人一点启示。