时间:2021-05-20
这篇文章主要介绍了JPA save()方法将字段更新为null的解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
今天在开发上碰到一个问题,在做页面展示的时候传给前端十个字段,前端修改了其中3个的值,所以只传了3个值给后端,其余字段默认为null,更新后其他7个字段在全部变为了空值。
在前端没法全量回传所有属性的前提下,由后端来处理这类问题。
解决方法:
1.写一个工具方法(UpdateUtil) 用来筛选出所有的空值字段
2.更新时先通过id搜索原始对象,通过findone()等都可以
3.将前端传来的不为空参数(也即是要修改值)copy覆盖原始对象属性值,通过BeanUtils.copyNullProperties(Object source, Object target)
以下是工具方法:
/** * 更新用工具类(忽略为null的字段) */public class UpdateUtil { /** * 所有为空值的属性都不copy * * @param source * @param target */ public static void copyNullProperties(Object source, Object target) { BeanUtils.copyProperties(source, target, getNullField(source)); } /** * 获取属性中为空的字段 * * @param target * @return */ private static String[] getNullField(Object target) { BeanWrapper beanWrapper = new BeanWrapperImpl(target); PropertyDescriptor[] propertyDescriptors = beanWrapper.getPropertyDescriptors(); Set<String> notNullFieldSet = new HashSet<>(); if (propertyDescriptors.length > 0) { for (PropertyDescriptor p : propertyDescriptors) { String name = p.getName(); Object value = beanWrapper.getPropertyValue(name); if (Objects.isNull(value)) { notNullFieldSet.add(name); } } } String[] notNullField = new String[notNullFieldSet.size()]; return notNullFieldSet.toArray(notNullField); }}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
1.情景展示 一共有22w条数据,需要将a表的主键更新至b表的指定字段,如何快速完成更新?2.解决方案 声明: 解决方案不只一种,该文章只介绍快速游标法及
搜索angularjs下拉框空白,可以出现很多解决方案,但是对于静态字段来说,网上目前还没有找到解决方案,如下:选择状态在职离职 如果要按照网上的方法来解决,
数据库中保存日期为NULL程序中查出来判断的时候提示如下:解决方案:if(model.LZ007!=null&&model.LZ007>DateTime.Min
Facebook6月第二周产品更新已新鲜出炉!本期Facebook为大家带来了跨境营销解决方案,希望各位卖家通过Facebook的跨境解决方案开拓新市场,下面快
一、程序导出word文档的方法将web/html内容导出为world文档,再java中有很多解决方案,比如使用Jacob、ApachePOI、Java2Word