diff --git a/samples/common/src/main/java/com/supwisdom/leaveschool/common/controller/api/CrudApiController.java b/samples/common/src/main/java/com/supwisdom/leaveschool/common/controller/api/CrudApiController.java
index 0f32960..e5e9e32 100644
--- a/samples/common/src/main/java/com/supwisdom/leaveschool/common/controller/api/CrudApiController.java
+++ b/samples/common/src/main/java/com/supwisdom/leaveschool/common/controller/api/CrudApiController.java
@@ -259,10 +259,10 @@
       throw new RuntimeException("exception.update.domain.not.exist");  // FIXME: RestException
     }
     
-    tmp = DomainUtils.merge(d, tmp);
+    d = DomainUtils.merge(d, tmp);
     
     @SuppressWarnings("unused")
-    D ret = getRepository().update(tmp);
+    D ret = getRepository().update(d);
     getRepository().flush();
     
     SuccessResponseModel res = new SuccessResponseModel();
@@ -319,7 +319,7 @@
       throw new RuntimeException("exception.delete.domain.not.exist");  // FIXME: RestException
     }
     
-    getRepository().delete(tmp);
+    getRepository().delete(id);
     
     SuccessResponseModel res = new SuccessResponseModel();
     res.setSuccess("info.delete.success");
diff --git a/samples/common/src/main/java/com/supwisdom/leaveschool/common/domain/ABaseDomain.java b/samples/common/src/main/java/com/supwisdom/leaveschool/common/domain/ABaseDomain.java
index 97707d5..2e44e7f 100644
--- a/samples/common/src/main/java/com/supwisdom/leaveschool/common/domain/ABaseDomain.java
+++ b/samples/common/src/main/java/com/supwisdom/leaveschool/common/domain/ABaseDomain.java
@@ -19,8 +19,8 @@
   private static final long serialVersionUID = 8023881887762314483L;
 
   @Id
-  @GeneratedValue(generator = "uuidStrategy")
-  @GenericGenerator(name = "uuidStrategy", strategy = "uuid")
+  //@GeneratedValue(generator = "uuidStrategy")
+  //@GenericGenerator(name = "uuidStrategy", strategy = "uuid")
   //@ApiModelProperty(value = "ID", required = false, example = "")
   @Column(name = "ID")
   private String id;
diff --git a/samples/common/src/main/java/com/supwisdom/leaveschool/common/repository/ABaseJpaRepositoryImpl.java b/samples/common/src/main/java/com/supwisdom/leaveschool/common/repository/ABaseJpaRepositoryImpl.java
index a245196..8e8b2cd 100644
--- a/samples/common/src/main/java/com/supwisdom/leaveschool/common/repository/ABaseJpaRepositoryImpl.java
+++ b/samples/common/src/main/java/com/supwisdom/leaveschool/common/repository/ABaseJpaRepositoryImpl.java
@@ -46,7 +46,9 @@
     try {
       Optional<T> entity = this.findById(id);
 
-      return entity.get();
+      if (entity.isPresent()) {
+        return entity.get();
+      }
     } catch (RuntimeException e) {
       System.out.println("RuntimeException:" + e.getMessage());
     } catch (Exception e) {
diff --git a/samples/common/src/main/java/com/supwisdom/leaveschool/common/repository/BaseJpaRepository.java b/samples/common/src/main/java/com/supwisdom/leaveschool/common/repository/BaseJpaRepository.java
index e1e0531..dabffdb 100644
--- a/samples/common/src/main/java/com/supwisdom/leaveschool/common/repository/BaseJpaRepository.java
+++ b/samples/common/src/main/java/com/supwisdom/leaveschool/common/repository/BaseJpaRepository.java
@@ -10,10 +10,21 @@
 import org.springframework.data.repository.NoRepositoryBean;
 
 import com.supwisdom.leaveschool.common.domain.ABaseDomain;
+import com.supwisdom.leaveschool.common.util.UUIDUtils;
 
 @NoRepositoryBean
 public interface BaseJpaRepository<T extends ABaseDomain> extends JpaRepository<T, String> {
   
+
+  /**
+   * 生成主键值。 默认使用方法
+   * 如果需要生成主键，需要由子类重写此方法根据需要的方式生成主键值。 
+   * @param entity 要持久化的对象 
+   */
+  public default String generateId() {
+    return UUIDUtils.create();
+  }
+
   public default Page<T> selectPageList(int pageIndex, int pageSize, Map<String, Object> mapBean) {
 
     PageRequest pageRequest = PageRequest.of(pageIndex, pageSize);
@@ -28,7 +39,9 @@
     try {
       Optional<T> entity = this.findById(id);
 
-      return entity.get();
+      if (entity.isPresent()) {
+        return entity.get();
+      }
     } catch (RuntimeException e) {
       System.out.println("RuntimeException:" + e.getMessage());
     } catch (Exception e) {
@@ -39,6 +52,10 @@
   }
   
   public default T insert(T entity) {
+    
+    if (entity.getId() == null || entity.getId().isEmpty()) {
+      entity.setId(generateId());
+    }
 
     if (entity.getCompanyId() == null || entity.getCompanyId().isEmpty()) {
       entity.setCompanyId("1");
@@ -62,5 +79,11 @@
 
     return e;
   }
+  
+  
+  public default void delete(String id) {
+    
+    this.deleteById(id);
+  }
 
 }
diff --git a/samples/common/src/main/java/com/supwisdom/leaveschool/common/util/DomainUtils.java b/samples/common/src/main/java/com/supwisdom/leaveschool/common/util/DomainUtils.java
index f02d7e5..37e1928 100644
--- a/samples/common/src/main/java/com/supwisdom/leaveschool/common/util/DomainUtils.java
+++ b/samples/common/src/main/java/com/supwisdom/leaveschool/common/util/DomainUtils.java
@@ -15,14 +15,14 @@
 public class DomainUtils {
 
   /**
-   * 合并 domain 中带有{@link Column}注解的字段值， 将 oldDomain 中的值，使用 newDomain 中不为null的值
+   * 合并 domain 中带有{@link Column}注解的字段值， 将 newDomain 中值为null的字段，使用 oldDomain 中的值
    * 进行覆盖
    * 
    * @param newDomain
-   *          ，
+   *          ，待覆盖的实体
    * @param oldDomain
-   *          ，被覆盖的实体
-   * @return 合并后的oldDomain
+   *          ，覆盖的实体
+   * @return 合并后的newDomain
    */
   public static <T> T merge(T newDomain, T oldDomain) {
 
@@ -39,13 +39,14 @@
         String fieldName = field.getName();
         Object newFieldValue = ReflectUtils.getFieldValue(newDomain, fieldName);
 
-        if (newFieldValue != null) {
-          ReflectUtils.setFieldValue(oldDomain, fieldName, newFieldValue);
+        if (newFieldValue == null) {
+          Object oldFieldValue = ReflectUtils.getFieldValue(oldDomain, fieldName);
+          ReflectUtils.setFieldValue(newDomain, fieldName, oldFieldValue);
         }
       }
     }
 
-    return oldDomain;
+    return newDomain;
   }
 
   public static <S, T> T copy(S sourceDomain, T targetDomain) {
diff --git a/samples/common/src/main/java/com/supwisdom/leaveschool/common/util/UUIDUtils.java b/samples/common/src/main/java/com/supwisdom/leaveschool/common/util/UUIDUtils.java
new file mode 100644
index 0000000..cb7b074
--- /dev/null
+++ b/samples/common/src/main/java/com/supwisdom/leaveschool/common/util/UUIDUtils.java
@@ -0,0 +1,87 @@
+package com.supwisdom.leaveschool.common.util;
+
+import java.math.BigInteger;
+import java.security.SecureRandom;
+import java.util.Random;
+import java.util.UUID;
+import java.util.concurrent.locks.ReentrantLock;
+
+public class UUIDUtils {
+
+  private static boolean IS_THREADLOCALRANDOM_AVAILABLE = false;
+  private static Random random;
+  private static final long leastSigBits;
+  private static final ReentrantLock lock = new ReentrantLock();
+  private static long lastTime;
+
+  static {
+    try {
+      IS_THREADLOCALRANDOM_AVAILABLE = null != UUIDUtils.class.getClassLoader().loadClass(
+          "java.util.concurrent.ThreadLocalRandom");
+    } catch (ClassNotFoundException e) {
+    }
+
+    byte[] seed = new SecureRandom().generateSeed(8);
+    leastSigBits = new BigInteger(seed).longValue();
+    if (!IS_THREADLOCALRANDOM_AVAILABLE) {
+      random = new Random(leastSigBits);
+    }
+  }
+
+  private UUIDUtils() {}
+
+  /**
+   * 生成32位随机码
+   * @return
+   */
+  public static String random() {
+    byte[] randomBytes = new byte[16];
+    if (IS_THREADLOCALRANDOM_AVAILABLE) {
+      java.util.concurrent.ThreadLocalRandom.current().nextBytes(randomBytes);
+    } else {
+      random.nextBytes(randomBytes);
+    }
+
+    long mostSigBits = 0;
+    for (int i = 0; i < 8; i++) {
+      mostSigBits = (mostSigBits << 8) | (randomBytes[i] & 0xff);
+    }
+    long leastSigBits = 0;
+    for (int i = 8; i < 16; i++) {
+      leastSigBits = (leastSigBits << 8) | (randomBytes[i] & 0xff);
+    }
+
+    return new UUID(mostSigBits, leastSigBits).toString().replaceAll("-", "");
+  }
+
+  /**
+   * 生成32位随机码
+   * @return
+   */
+  public static String create() {
+    long timeMillis = (System.currentTimeMillis() * 10000) + 0x01B21DD213814000L;
+
+    lock.lock();
+    try {
+      if (timeMillis > lastTime) {
+        lastTime = timeMillis;
+      } else {
+        timeMillis = ++lastTime;
+      }
+    } finally {
+      lock.unlock();
+    }
+
+    long mostSigBits = timeMillis << 32;
+    mostSigBits |= (timeMillis & 0xFFFF00000000L) >> 16;
+    mostSigBits |= 0x1000 | ((timeMillis >> 48) & 0x0FFF); 
+    return new UUID(mostSigBits, leastSigBits).toString().replaceAll("-", "");
+    
+  }
+  
+  public static void main(String[] args){
+    System.out.println(random());
+    System.out.println(create());
+  }
+
+}
