在更新数据时,如果使用的是UUID随机生成id,在属性拷贝后id就会和数据库中的该条数据的id不一致,导致更新失败并且新增一条除了id字段其他字段都相同的一条数据,这时就可以使用忽略某些字段的方法进行属性拷贝,比如在拷贝时忽略id,这样就只是将除了id之外的其他所有字段进行拷贝从而进行正常更新。
方法如下:
public class StringUtils extends org.springframework.util.StringUtils {
public static void copyPropertiesIgnoreNull(Object src, Object target, String... ignoreColumn) {
BeanUtils.copyProperties(src, target, getNullPropertyNames(src, ignoreColumn));
}
}
public static String[] getNullPropertyNames(Object source, String... ignoreColumn) {
final BeanWrapper src = new BeanWrapperImpl(source);
java.beans.PropertyDescriptor[] pds = src.getPropertyDescriptors();
Set<String> emptyNames = new HashSet<>();
for (java.beans.PropertyDescriptor pd : pds) {
String columnName = pd.getName();
// 是否为忽略字段
if (Arrays.asList(ignoreColumn).contains(columnName)) {
emptyNames.add(columnName);
continue;
}
Object srcValue = src.getPropertyValue(columnName);
//是否为null
if (srcValue == null) {
emptyNames.add(columnName);
}
}
return emptyNames.toArray(new String[0]);
}
标签:src,String,Object,忽略,columnName,拷贝,id,属性 From: https://www.cnblogs.com/sensenh/p/17920502.html