From 48277d6c1257d21362ee1e08f8167c6fad3e4b12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=80=E6=BA=90=E6=B5=B7=E5=93=A5?= Date: Fri, 14 Apr 2023 18:09:03 +0800 Subject: [PATCH] =?UTF-8?q?fixed=EF=BC=9A=E4=BF=AE=E5=A4=8D=E5=A4=9A?= =?UTF-8?q?=E7=A7=9F=E6=88=B7=E7=9A=84=E5=9C=BA=E6=99=AF=E4=B8=8B=20union?= =?UTF-8?q?=20=E7=9A=84=E5=AD=90=E6=9F=A5=E8=AF=A2=E4=B8=8D=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E7=A7=9F=E6=88=B7=20ID=20=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mybatisflex/core/table/TableInfo.java | 14 +++++++++----- .../mybatisflex/core/table/TableInfoFactory.java | 13 ++++++++++++- .../java/com/mybatisflex/test/TenantTester.java | 6 +++--- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableInfo.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableInfo.java index bb644d12..6f5e1996 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableInfo.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableInfo.java @@ -24,10 +24,7 @@ import com.mybatisflex.core.FlexGlobalConfig; import com.mybatisflex.core.exception.FlexExceptions; import com.mybatisflex.core.javassist.ModifyAttrsRecord; import com.mybatisflex.core.mybatis.TypeHandlerObject; -import com.mybatisflex.core.query.CPI; -import com.mybatisflex.core.query.QueryCondition; -import com.mybatisflex.core.query.QueryWrapper; -import com.mybatisflex.core.query.UnionWrapper; +import com.mybatisflex.core.query.*; import com.mybatisflex.core.row.Row; import com.mybatisflex.core.tenant.TenantManager; import com.mybatisflex.core.util.*; @@ -513,7 +510,14 @@ public class TableInfo { List unions = CPI.getUnions(queryWrapper); if (CollectionUtil.isNotEmpty(unions)) { for (UnionWrapper union : unions) { - appendConditions(entity, union.getQueryWrapper()); + QueryWrapper unionQueryWrapper = union.getQueryWrapper(); + List queryTables = CPI.getQueryTables(unionQueryWrapper); + for (QueryTable queryTable : queryTables) { + TableInfo tableInfo = TableInfoFactory.ofTableName(queryTable.getName()); + if (tableInfo != null) { + tableInfo.appendConditions(entity, unionQueryWrapper); + } + } } } diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableInfoFactory.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableInfoFactory.java index 4b57098e..4094d8b7 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableInfoFactory.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableInfoFactory.java @@ -63,6 +63,7 @@ public class TableInfoFactory { private static final Map, TableInfo> mapperTableInfoMap = new ConcurrentHashMap<>(); private static final Map, TableInfo> entityTableMap = new ConcurrentHashMap<>(); + private static final Map tableInfoMap = new ConcurrentHashMap<>(); public static TableInfo ofMapperClass(Class mapperClass) { @@ -78,10 +79,20 @@ public class TableInfoFactory { public static TableInfo ofEntityClass(Class entityClass) { - return MapUtil.computeIfAbsent(entityTableMap, entityClass, key -> createTableInfo(entityClass)); + return MapUtil.computeIfAbsent(entityTableMap, entityClass, aClass -> { + TableInfo tableInfo = createTableInfo(entityClass); + tableInfoMap.put(tableInfo.getTableName(), tableInfo); + return tableInfo; + }); } + public static TableInfo ofTableName(String tableName){ + return tableInfoMap.get(tableName); + } + + + private static Class getEntityClass(Class mapperClass) { Type[] genericInterfaces = mapperClass.getGenericInterfaces(); if (genericInterfaces.length == 1) { diff --git a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/TenantTester.java b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/TenantTester.java index bdff1293..0c0ebfd7 100644 --- a/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/TenantTester.java +++ b/mybatis-flex-test/mybatis-flex-native-test/src/main/java/com/mybatisflex/test/TenantTester.java @@ -27,6 +27,7 @@ import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; import javax.sql.DataSource; +import static com.mybatisflex.core.query.QueryMethods.select; import static com.mybatisflex.test.table.Tables.ACCOUNT; import static com.mybatisflex.test.table.Tables.TENANT_ACCOUNT; @@ -62,11 +63,10 @@ public class TenantTester { mapper.selectListByQuery(QueryWrapper.create() .select(TENANT_ACCOUNT.ALL_COLUMNS) - .from(TENANT_ACCOUNT.as("a"), ACCOUNT.as("b")) + .from(TENANT_ACCOUNT.as("c"), ACCOUNT.as("b")) .where(TENANT_ACCOUNT.ID.eq(ACCOUNT.ID)) .and(TENANT_ACCOUNT.ID.eq(1)) - .unionAll(QueryWrapper.create() - .select(TENANT_ACCOUNT.ALL_COLUMNS).from(TENANT_ACCOUNT) + .unionAll(select(TENANT_ACCOUNT.ALL_COLUMNS).from(TENANT_ACCOUNT) .where(TENANT_ACCOUNT.ID.eq(2)) ) );