diff --git a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/dao/BaseRepository.java b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/dao/BaseRepository.java index 8ac9fdc..6a48fbe 100644 --- a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/dao/BaseRepository.java +++ b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/dao/BaseRepository.java @@ -30,6 +30,17 @@ public interface BaseRepository extends JpaReposito T insert(T item); /** + * 新增对象
+ * 注意:如果对象id是long,并且为0,则设为 + * 字符串,并且没有赋值,该方法将自动设置为uuid值 + * @param item + * 持久对象,或者对象集合 + * @param initParam 是否需要初始化值为null的属性, + * @throws Exception + */ + T insert(T item,boolean initParam); + + /** * 更新对象数据 * * @param item diff --git a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/daoimpl/BaseRepositoryImpl.java b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/daoimpl/BaseRepositoryImpl.java index 3024c67..4145076 100644 --- a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/daoimpl/BaseRepositoryImpl.java +++ b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/daoimpl/BaseRepositoryImpl.java @@ -84,13 +84,18 @@ public class BaseRepositoryImpl extends SimpleJpaRep @Override public T insert(T item) { - return innerSave(item); + return insert(item,true); + } + + @Override + public T insert(T item, boolean initParam) { + return innerSave(item, initParam); } @Override public S save(S entity) { //复写save方法,若id为0或空则新增,不然则修改 - return (S) innerSave(entity); + return (S) innerSave(entity,true); } @Override @@ -1040,9 +1045,9 @@ public class BaseRepositoryImpl extends SimpleJpaRep * @param item 保存对象 * @return */ - private T innerSave(T item) { + private T innerSave(T item, boolean initParam) { try { - if(item ==null) { + if(item == null) { return null; } Class clazz = item.getClass(); @@ -1066,7 +1071,7 @@ public class BaseRepositoryImpl extends SimpleJpaRep if(idField != null){ Class type = idField.getType(); Object val = idField.get(item); - if((type == long.class || type == Long.class) && (val == null || Long.parseLong(val.toString()) == 0)){ + if(type == Long.class && (val == null || Long.parseLong(val.toString()) == 0)){ // long类型主键,以snowflake为主键 idField.set(item, snowflakeIdMaker.nextId()); } else if(type == String.class && (val==null || "".equals(val))){ @@ -1075,6 +1080,16 @@ public class BaseRepositoryImpl extends SimpleJpaRep } } + //属性值过滤,避免null值 + if(initParam){ + for(Field checkField : clazz.getFields()){ + if(checkField.get(item) == null){ + // 未赋值的属性,进行初始化赋值 + fieldSetInitParam(item, checkField); + } + } + } + entityManager.merge(item); entityManager.flush(); if(idField!=null){ @@ -1088,6 +1103,30 @@ public class BaseRepositoryImpl extends SimpleJpaRep } } + /** + * 对为赋值的属性进行赋值 + * @param field + */ + private void fieldSetInitParam(T item,Field field) { + try { + if (field.getType() == String.class) { + field.set(item, ""); + } else if (field.getType() == Byte.class || field.getType() == Character.class || field.getType() == Integer.class) { + field.set(item, 0); + } else if(field.getType() == Long.class){ + field.set(item, 0L); + } else if(field.getType() == Float.class){ + field.set(item, 0.0f); + } else if(field.getType() == Double.class){ + field.set(item, 0.0d); + } else if(field.getType() == Boolean.class){ + field.set(item, false); + } + } catch (IllegalAccessException e) { + LOGGER.error("自动赋值出错:{}", e.getMessage(), e); + } + } + /************** 部分业务 *************/ private String getNowTime(boolean needSecond) { return needSecond ? getNowTime("yyyy-MM-dd HH:mm:ss") : getNowTime("yyyy-MM-dd HH:mm");