Explorar o código

Merge pull request #3614 from nancheung97/gitee-I3V6D6

:bug: Fix 主键添加@OrderBy无效
qmdx %!s(int64=4) %!d(string=hai) anos
pai
achega
284cdecfab

+ 1 - 4
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/metadata/TableInfo.java

@@ -176,7 +176,7 @@ public class TableInfo implements Constants {
      */
     @Getter
     @Setter
-    private List<TableFieldInfo> orderByFields;
+    private List<TableFieldInfo> orderByFields = new LinkedList<>();
 
     public TableInfo(Class<?> entityType) {
         this.entityType = entityType;
@@ -454,9 +454,6 @@ public class TableInfo implements Constants {
                 this.withUpdateFill = true;
             }
             if (i.isOrderBy()) {
-                if (null == this.orderByFields) {
-                    this.orderByFields = new LinkedList<>();
-                }
                 this.orderByFields.add(i);
             }
             if (i.isVersion()) {

+ 20 - 14
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/metadata/TableInfoHelper.java

@@ -282,8 +282,6 @@ public class TableInfoHelper {
         boolean existTableId = isExistTableId(list);
         // 是否存在 @TableLogic 注解
         boolean existTableLogic = isExistTableLogic(list);
-        // 是否存在 @OrderBy 注解
-        boolean existOrderBy = isExistOrderBy(list);
 
         List<TableFieldInfo> fieldList = new ArrayList<>(list.size());
         for (Field field : list) {
@@ -291,34 +289,42 @@ public class TableInfoHelper {
                 continue;
             }
 
+            boolean isPK = false;
+            boolean isOrderBy = field.getAnnotation(OrderBy.class) != null;
+
             /* 主键ID 初始化 */
             if (existTableId) {
                 TableId tableId = field.getAnnotation(TableId.class);
                 if (tableId != null) {
                     if (isReadPK) {
                         throw ExceptionUtils.mpe("@TableId can't more than one in Class: \"%s\".", clazz.getName());
-                    } else {
-                        initTableIdWithAnnotation(dbConfig, tableInfo, field, tableId, reflector);
-                        isReadPK = true;
-                        continue;
                     }
+
+                    initTableIdWithAnnotation(dbConfig, tableInfo, field, tableId, reflector);
+                    isPK = isReadPK = true;
                 }
             } else if (!isReadPK) {
-                isReadPK = initTableIdWithoutAnnotation(dbConfig, tableInfo, field, reflector);
-                if (isReadPK) {
-                    continue;
+                isPK = isReadPK = initTableIdWithoutAnnotation(dbConfig, tableInfo, field, reflector);
+
+            }
+
+            if (isPK) {
+                if (isOrderBy) {
+                    tableInfo.getOrderByFields().add(new TableFieldInfo(dbConfig, tableInfo, field, reflector, existTableLogic, true));
                 }
+                continue;
             }
+
             final TableField tableField = field.getAnnotation(TableField.class);
 
             /* 有 @TableField 注解的字段初始化 */
             if (tableField != null) {
-                fieldList.add(new TableFieldInfo(dbConfig, tableInfo, field, tableField, reflector, existTableLogic, existOrderBy));
+                fieldList.add(new TableFieldInfo(dbConfig, tableInfo, field, tableField, reflector, existTableLogic, isOrderBy));
                 continue;
             }
 
             /* 无 @TableField  注解的字段初始化 */
-            fieldList.add(new TableFieldInfo(dbConfig, tableInfo, field, reflector, existTableLogic, existOrderBy));
+            fieldList.add(new TableFieldInfo(dbConfig, tableInfo, field, reflector, existTableLogic, isOrderBy));
         }
 
         /* 字段列表 */
@@ -336,7 +342,7 @@ public class TableInfoHelper {
      * </p>
      *
      * @param list 字段列表
-     * @return true 为存在 @TableId 注解;
+     * @return true 为存在 {@link TableId} 注解;
      */
     public static boolean isExistTableId(List<Field> list) {
         return list.stream().anyMatch(field -> field.isAnnotationPresent(TableId.class));
@@ -348,7 +354,7 @@ public class TableInfoHelper {
      * </p>
      *
      * @param list 字段列表
-     * @return true 为存在 @TableId 注解;
+     * @return true 为存在 {@link TableLogic} 注解;
      */
     public static boolean isExistTableLogic(List<Field> list) {
         return list.stream().anyMatch(field -> field.isAnnotationPresent(TableLogic.class));
@@ -360,7 +366,7 @@ public class TableInfoHelper {
      * </p>
      *
      * @param list 字段列表
-     * @return true 为存在 @TableId 注解;
+     * @return true 为存在 {@link OrderBy} 注解;
      */
     public static boolean isExistOrderBy(List<Field> list) {
         return list.stream().anyMatch(field -> field.isAnnotationPresent(OrderBy.class));