JPA save()方法將字段更新為null的解決方案
這篇文章主要介紹了JPA save()方法將字段更新為null的解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
今天在開發(fā)上碰到一個(gè)問題,在做頁面展示的時(shí)候傳給前端十個(gè)字段,前端修改了其中3個(gè)的值,所以只傳了3個(gè)值給后端,其余字段默認(rèn)為null,更新后其他7個(gè)字段在全部變?yōu)榱丝罩怠?/p>
在前端沒法全量回傳所有屬性的前提下,由后端來處理這類問題。
解決方法:
1.寫一個(gè)工具方法(UpdateUtil) 用來篩選出所有的空值字段
2.更新時(shí)先通過id搜索原始對(duì)象,通過findone()等都可以
3.將前端傳來的不為空參數(shù)(也即是要修改值)copy覆蓋原始對(duì)象屬性值,通過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);
}
}
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
淺談java對(duì)象轉(zhuǎn)json,數(shù)字精確出現(xiàn)丟失問題
下面小編就為大家?guī)硪黄獪\談java對(duì)象轉(zhuǎn)json, 數(shù)字精確出現(xiàn)丟失問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-03-03
Java網(wǎng)絡(luò)編程之URL+URLconnection使用方法示例
這篇文章主要介紹了Java網(wǎng)絡(luò)編程之URL+URLconnection使用方法示例,還是比較不錯(cuò)的,這里分享給大家,供需要的朋友參考。2017-11-11
簡單實(shí)現(xiàn)java數(shù)獨(dú)游戲
這篇文章主要教大家如何簡單實(shí)現(xiàn)java數(shù)獨(dú)游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
SpringBoot使用@valid進(jìn)行參數(shù)校驗(yàn)的流程步驟
SpringBoot 提供了一種方便的方式來進(jìn)行參數(shù)校驗(yàn):使用 Hibernate Validator,Spring Boot 提供了一種方便的方式來進(jìn)行參數(shù)校驗(yàn):使用 Hibernate Validator,所以本文給大家介紹了SpringBoot使用@valid進(jìn)行參數(shù)校驗(yàn)的流程步驟,需要的朋友可以參考下2023-09-09

