private String genWhereClause(PropertyMap pm, Object value) {
   WhereModelAbstract whereModel = new SingleInputWhereModel();
   String[] values = {value == null ? "" : value.toString()};
   String[] matchOperateSign = {"="};
   WhereItem wi = new WhereItem();
   wi.setType(pm.getType());
   wi.setSearchName(pm.getPropertyName());
   wi.setValues(values);
   wi.setMatchOperateSign(matchOperateSign);
   whereModel.addWhereItem(wi);
   return whereModel.genWhereClause();
 }
  public void checkValid(DomainModel domainModel, Map values, Action action)
      throws ValidateException {
    Assert.notNull(domainModel, "PropertyMap对象不能为空");
    Assert.isInstanceOf(PropertyMap.class, domainModel, "属性非空有效性校验失败,传入的类型必须为PropertyMap!");
    Assert.notNull(values, "values不允许为空,请确认!");
    Assert.notNull(action, "在进行唯一性检测时传入的操作类型不能为空");

    PropertyMap pm = (PropertyMap) domainModel;
    if (pm.isUnique() == false) return; // 允许重复则不进行唯一性检测

    Object value = values.get(Validate.VALUE_CHECK_OBJ);
    Object pkValue = values.get(UniqueValidate.VALUE_CHECK_PK_OBJ); // 获取 主键值
    if (value == null || StringHelper.isNullString(value.toString())) return; // 如果是空值则不进行唯一性检测

    if (action instanceof AddAction) {
      String HQL =
          "from " + pm.getEntityMap().getEntityName() + " eo  where  " + genWhereClause(pm, value);
      logger.debug("=====================" + HQL + "============================");
      if (Udf.dbOperator.isExist(HQL)) {
        throw new ValidateException(
            "以[" + value + "]为值的字段[" + pm.getChineseName() + "]在系统中已经存在,不能重复添加!");
      }
    } else if (action instanceof ModifyAction) {
      String HQL =
          "from "
              + pm.getEntityMap().getEntityName()
              + " eo  where  "
              + genWhereClause(
                  pm.getEntityMap()
                      .getPropertyMap(pm.getEntityMap().getPKPropertyMap().getPropertyName()),
                  pkValue);
      logger.debug("=====================" + HQL + "============================");
      Object obj = Udf.dbOperator.findUniqueResult(HQL);
      Object oldValue =
          ReflectHelper.invoke(
              obj, "get" + StringHelper.converseFirstCharToUpper(pm.getPropertyName()));
      if (this.isEquals(pm, oldValue, value) == true) return; // 如果新旧两个值相等则不必进行校验,说明值没有被改变

      // 如果新旧两个值不相等,则说明新值已经发生改变,则从数据库中检测是否有重复的记录
      HQL =
          "from " + pm.getEntityMap().getEntityName() + " eo  where  " + genWhereClause(pm, value);
      logger.debug("=====================" + HQL + "============================");
      if (Udf.dbOperator.isExist(HQL)) {
        throw new ValidateException(
            "以[" + value + "]为值的字段[" + pm.getChineseName() + "]在系统中已经存在,不能修改成[" + value + "]");
      }
    }
  }
  public void checkValid(PropertyMap pm, Object value, Object pkValue, AbstractAction action)
      throws ValidateException {
    if (pm.isUnique() == false) return; // 允许重复则不进行唯一性检测
    if (value == null || StringHelper.isNullString(value.toString())) return; // 如果是空值则不进行唯一性检测

    Assert.notNull(pm, "PropertyMap对象不能为空");
    Assert.notNull(action, "在进行唯一性检测时传入的操作类型不能为空");

    if (action instanceof AddAction) {
      String HQL =
          "from " + pm.getEntityMap().getEntityName() + " eo  where  " + genWhereClause(pm, value);
      logger.debug("=====================" + HQL + "============================");
      if (Udf.dbOperator.isExist(HQL)) {
        throw new ValidateException(
            "以[" + value + "]为值的字段[" + pm.getChineseName() + "]在系统中已经存在,不能重复添加!");
      }
    } else if (action instanceof ModifyAction) {
      String HQL =
          "from "
              + pm.getEntityMap().getEntityName()
              + " eo  where  "
              + genWhereClause(
                  pm.getEntityMap()
                      .getPropertyMap(pm.getEntityMap().getPKPropertyMap().getPropertyName()),
                  pkValue);
      logger.debug("=====================" + HQL + "============================");
      Object obj = Udf.dbOperator.findUniqueResult(HQL);
      Object oldValue =
          ReflectHelper.invoke(
              obj, "get" + StringHelper.converseFirstCharToUpper(pm.getPropertyName()));
      if (this.isEquals(pm, oldValue, value) == true) return; // 如果新旧两个值相等则不必进行校验,说明值没有被改变

      // 如果新旧两个值不相等,则说明新值已经发生改变,则从数据库中检测是否有重复的记录
      HQL =
          "from " + pm.getEntityMap().getEntityName() + " eo  where  " + genWhereClause(pm, value);
      logger.debug("=====================" + HQL + "============================");
      if (Udf.dbOperator.isExist(HQL)) {
        throw new ValidateException(
            "以[" + value + "]为值的字段[" + pm.getChineseName() + "]在系统中已经存在,不能修改成[" + value + "]");
      }
    }
  }