瀏覽代碼

fix 租户id获取的执行顺序

miemie 3 年之前
父節點
當前提交
86ecda70f2

+ 6 - 4
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/TenantLineInnerInterceptor.java

@@ -470,7 +470,7 @@ public class TenantLineInnerInterceptor extends JsqlParserSupport implements Inn
                         onTables = Collections.singletonList(leftTable);
                     }
                 } else if (join.isLeft()) {
-                     onTables = Collections.singletonList(joinTable);
+                    onTables = Collections.singletonList(joinTable);
                 } else if (join.isInner()) {
                     if (mainTable == null) {
                         onTables = Collections.singletonList(joinTable);
@@ -529,14 +529,16 @@ public class TenantLineInnerInterceptor extends JsqlParserSupport implements Inn
             return currentExpression;
         }
         // 租户
-        Expression tenantId = tenantLineHandler.getTenantId();
         // 构造每张表的条件
         List<EqualsTo> equalsTos = tables.stream()
             .filter(x -> !tenantLineHandler.ignoreTable(x.getName()))
-            .map(item -> new EqualsTo(getAliasColumn(item), tenantId))
+            .map(item -> {
+                Expression tenantId = tenantLineHandler.getTenantId();
+                return new EqualsTo(getAliasColumn(item), tenantId);
+            })
             .collect(Collectors.toList());
 
-        if(CollectionUtils.isEmpty(equalsTos)){
+        if (CollectionUtils.isEmpty(equalsTos)) {
             return currentExpression;
         }
 

+ 5 - 0
mybatis-plus-extension/src/test/java/com/baomidou/mybatisplus/extension/plugins/inner/TenantLineInnerInterceptorTest.java

@@ -16,13 +16,18 @@ import static org.assertj.core.api.Assertions.assertThat;
 class TenantLineInnerInterceptorTest {
 
     private final TenantLineInnerInterceptor interceptor = new TenantLineInnerInterceptor(new TenantLineHandler() {
+        private boolean ignoreFirst;// 需要执行 getTenantId 前必须先执行 ignoreTable
+
         @Override
         public Expression getTenantId() {
+            assertThat(ignoreFirst).isEqualTo(true);
+            ignoreFirst = false;
             return new LongValue(1);
         }
 
         @Override
         public boolean ignoreTable(String tableName) {
+            ignoreFirst = true;
             if (Objects.equals(tableName, "sys_dict")) {
                 return true;
             }