Hibernate
中更新非空域;传入一个对象,这个对象中有的域可能是null
,但是我并不想覆盖原来的数据库中的有值的域。
我的实现方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| public class BeanUtil {
public static void copyNonNullProperties(Object src, Object target) { BeanUtils.copyProperties(src, target, getNullPropertyNames(src)); }
public static String[] getNullPropertyNames (Object source) { final BeanWrapper src = new BeanWrapperImpl(source); PropertyDescriptor[] pds = src.getPropertyDescriptors();
Set<String> emptyNames = new HashSet<>(); for(PropertyDescriptor pd : pds) { Object srcValue = src.getPropertyValue(pd.getName()); if (srcValue == null) emptyNames.add(pd.getName()); } String[] result = new String[emptyNames.size()]; return emptyNames.toArray(result); } }
|
如何调用:
1 2 3 4 5 6
| 实体类1:src (前端传来的数据) 实体类1:existing (通过前端传来数据的id获取得到数据库表里的数据)
copyNonNullProperties(src,existing);
iModelConfigDAO.update(existing);
|
iModelConfigDAO
的实现类说明:
1 2 3 4 5 6 7 8 9 10 11 12
| public class ModelConfigDAOImpl implements IModelConfigDAO{ @Resource private SessionFactory sessionFactory;
private Session getSession() { return sessionFactory.getCurrentSession(); }
public void update(ModelConfig modelConfig) { this.getSession().update(modelConfig); } }
|