Ver Fonte

回滚getTableInfo.

nieqiuqiu há 6 anos atrás
pai
commit
d7ab8bb849

+ 15 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/TableInfoHelper.java

@@ -77,7 +77,21 @@ public class TableInfoHelper {
             || clazz == String.class) {
             return null;
         }
-        return TABLE_INFO_CACHE.get(ClassUtils.getUserClass(clazz));
+        // https://github.com/baomidou/mybatis-plus/issues/299
+        TableInfo tableInfo = TABLE_INFO_CACHE.get(ClassUtils.getUserClass(clazz));
+        if (null != tableInfo) {
+            return tableInfo;
+        }
+        //尝试获取父类缓存
+        Class<?> currentClass = clazz;
+        while (null == tableInfo && Object.class != currentClass) {
+            currentClass = currentClass.getSuperclass();
+            tableInfo = TABLE_INFO_CACHE.get(ClassUtils.getUserClass(currentClass));
+        }
+        if (tableInfo != null) {
+            TABLE_INFO_CACHE.put(ClassUtils.getUserClass(clazz), tableInfo);
+        }
+        return tableInfo;
     }
 
     /**

+ 0 - 6
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/OptimisticLockerInterceptor.java

@@ -20,7 +20,6 @@ import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
 import com.baomidou.mybatisplus.core.metadata.TableInfo;
-import com.baomidou.mybatisplus.core.toolkit.ClassUtils;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.core.toolkit.ReflectionKit;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
@@ -118,11 +117,6 @@ public class OptimisticLockerInterceptor implements Interceptor {
                 String methodName = methodId.substring(methodId.lastIndexOf(StringPool.DOT) + 1);
                 Class<?> entityClass = et.getClass();
                 TableInfo tableInfo = TableInfoHelper.getTableInfo(entityClass);
-                // fixed github 299
-                while (tableInfo == null && entityClass != null) {
-                    entityClass = ClassUtils.getUserClass(entityClass.getSuperclass());
-                    tableInfo = TableInfoHelper.getTableInfo(entityClass);
-                }
                 EntityField versionField = this.getVersionField(entityClass, tableInfo);
                 if (versionField == null) {
                     return invocation.proceed();