/**
   * 从类定义中解析表定义<br>
   * 仅解析传入类型:不对传入类型的接口,以及父类进行注解获取<br>
   * <功能详细描述>
   *
   * @param type
   * @return [参数说明]
   * @return JPAEntityTableDef [返回类型说明]
   * @exception throws [异常类型] [异常说明]
   * @see [类、类#方法、类#成员]
   */
  private static JPAEntityTableDef doAnalyzeTableDef(Class<?> type) {
    // 没有注解的时候默认使用类名当作表名
    String tableName = type.getSimpleName();
    String comment = "";
    // 如果存在javax注解中的Entity读取其Name
    // org.hibernate.annotations.Entity该类中不含有表名,不进行解析
    if (type.isAnnotationPresent(Entity.class)) {
      String entityName = type.getAnnotation(Entity.class).name();
      if (!StringUtils.isEmpty(entityName)) {
        tableName = entityName.toUpperCase();
      }
    }
    if (type.isAnnotationPresent(Table.class)) {
      // 如果含有注解:javax.persistence.Table
      String annoTableName = type.getAnnotation(Table.class).name();
      if (!StringUtils.isEmpty(annoTableName)) {
        tableName = annoTableName.toUpperCase();
      }
    }
    if (type.isAnnotationPresent(org.hibernate.annotations.Table.class)) {
      // 如果含有注解:javax.persistence.Table
      String annoTableComment = type.getAnnotation(org.hibernate.annotations.Table.class).comment();
      if (!StringUtils.isEmpty(annoTableComment)) {
        comment = annoTableComment;
      }
    }

    JPAEntityTableDef tableDef = new JPAEntityTableDef();
    tableDef.setTableName(tableName);
    tableDef.setComment(comment);
    return tableDef;
  }
  /**
   * 解析类或接口生成对应的表定义详情(含字段以及索引)<br>
   * <功能详细描述>
   *
   * @param type
   * @return [参数说明]
   * @return JPAEntityTableDef [返回类型说明]
   * @exception throws [异常类型] [异常说明]
   * @see [类、类#方法、类#成员]
   */
  private static JPAEntityTableDef doAnalyzeToTableDefDetail(Class<?> type) {
    JPAEntityTableDef tableDef = doAnalyzeTableDef(type); // 解析表定义

    List<JPAEntityColumnDef> columnDefs =
        doAnalyzeCoumnDefs(tableDef.getTableName(), type); // 解析字段集合

    tableDef.setColumns(columnDefs);

    return tableDef;
  }