JPA-save()方法会将字段更新为null的解决方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

JPA-save()⽅法会将字段更新为null的解决⽅法
Spring data jpa使⽤save⽅法update时,如何将null的字段忽略?
⽅案如下:
说明:
⽬标源:请求更新的实体数据。

数据源:通过⽬标源传上来的id,去数据库中查出的实体数据
我们可以将⽬标源中需要改变的属性值过滤掉以后,将数据源中的数据复制到⽬标源中,这样就达到了,只是更新需要改变的属性值,不需要更新的保持不变。

⼯具类如下:
import org.springframework.beans.BeanUtils;
import org.springframework.beans.BeanWrapper;
import org.springframework.beans.BeanWrapperImpl;
import java.beans.PropertyDescriptor;
import java.util.HashSet;
import java.util.Set;
/**
* There is no royal road to learning.
* Description:提交实体对象中的null赋值
* Created by 贤领·周 on 2018年04⽉10⽇ 15:26
*/
public class UpdateTool {
/**
* 将⽬标源中不为空的字段过滤,将数据库中查出的数据源复制到提交的⽬标源中
*
* @param source ⽤id从数据库中查出来的数据源
* @param target 提交的实体,⽬标源
*/
public static void copyNullProperties(Object source, Object target) {
BeanUtils.copyProperties(source, target, getNoNullProperties(target));
}
/**
* @param target ⽬标源数据
* @return 将⽬标源中不为空的字段取出
*/
private static String[] getNoNullProperties(Object target) {
BeanWrapper srcBean = new BeanWrapperImpl(target);
PropertyDescriptor[] pds = srcBean.getPropertyDescriptors();
Set<String> noEmptyName = new HashSet<>();
for (PropertyDescriptor p : pds) {
Object value = srcBean.getPropertyValue(p.getName());
if (value != null) noEmptyName.add(p.getName());
}
String[] result = new String[noEmptyName.size()];
return noEmptyName.toArray(result);
}
}。

相关文档
最新文档