SpringDataJpa中实现null不更新的解决方案 矫情吗;* 2023-10-07 08:17 1阅读 0赞 > 之前提到过在使用SpringDataJpa中的`save()`和`saveAndFlush()`方时,会丢失已经存在的值,将已经存在的值更新为null。如果你对这块不是很理解,请看我之前的文章:[SpringData JPA save和saveAndFlush的区别][SpringData JPA save_saveAndFlush]。 > 下面介绍几种解决方式。 ### 一、使用BeanUtils ### Spring为我们提供了一个工具类即:`BeanUtils`。注意不要引错了包。 其中存在一个可以在拷贝时,忽略到null拷贝的方法。 你需要构建一个数组,数组内容为你希望被忽略的属性的名称。 然后先查出需要更新的对象,然后使用方法进行拷贝,再将其存入或更新。 `注:这种方法只是不拷贝null值,并不是你将含有属性值为null的对象映射的数据存入就不会覆盖。` public static void copyProperties(Object source, Object target, String... ignoreProperties) throws BeansException { copyProperties(source, target, null, ignoreProperties); } ### 二、使用@DynamicUpdate ### @DynamicUpdate 与 @DynamicInsert 都是属性值为null的不进行更新或者插入,需要将默认值value置为true(默认为true,但是不同版本可能不一样,这里可以点进源码确认一下)。 ### 三、自己实现反射 ### 实现思路:先查出需要修改的一条数据对应的对象,将新传入的对象与需要修改的对象进行比较。通过反射,将新传入的对象中全部的参数获取出来,然后进行判断,如果`新传入的对象的属性与需要修改的对象的属性不为null且与要修改的对象的同一属性值不相等`,则进行赋值。 [SpringData JPA save_saveAndFlush]: https://evanwang.blog.csdn.net/article/details/103965987
还没有评论,来说两句吧...