public class JpaTemplate { @PersistenceContext private EntityManager entityManager; @Transactional public void update(Object obj) throws IllegalAccessException, NoSuchFieldException { Class<?> clazz = obj.getClass(); String name = clazz.getName().substring(clazz.getName().lastIndexOf(".") + 1); StringBuilder sb = new StringBuilder("update " + name + " as t set"); Field[] fields = clazz.getDeclaredFields(); boolean fieldFlag = false; for (Field field : fields ) { String fieldName = field.getName(); field.setAccessible(true); if (null != field.get(obj)) { sb.append(" t." + fieldName + " = :" + fieldName + ","); fieldFlag = true; } } if (fieldFlag) { sb.deleteCharAt(sb.length() - 1); }else{ throw new DataException("更新对像全部字段为空"); } sb.append(" where t.id = :id"); Query query = entityManager.createQuery(sb.toString()); for (Field field: fields ) { Object value = field.get(obj); if (null != value) { query.setParameter(field.getName(),value); } } Class<?> superclass = obj.getClass().getSuperclass(); Field id = superclass.getDeclaredField("id"); id.setAccessible(true); query.setParameter("id",id.get(obj)); query.executeUpdate(); } }
实体类滤空更新(JPQL拼接)
最新推荐文章于 2022-09-29 21:55:26 发布