diff --git a/pom.xml b/pom.xml index 614a2d2b2..0ef0b6fa4 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ com.easy-query easy-query-all pom - 2.0.28 + 2.0.29 easy-query java object query distributed connector https://github.com/xuejmnet/easy-query diff --git a/samples/console-demo/pom.xml b/samples/console-demo/pom.xml index 9fbc11231..60c4d2a31 100644 --- a/samples/console-demo/pom.xml +++ b/samples/console-demo/pom.xml @@ -6,7 +6,7 @@ com.easy-query samples - 2.0.28 + 2.0.29 console-demo @@ -22,21 +22,21 @@ com.easy-query sql-mysql - 2.0.28 + 2.0.29 compile com.easy-query sql-processor - 2.0.28 + 2.0.29 compile com.easy-query sql-api-proxy - 2.0.28 + 2.0.29 compile diff --git a/samples/easy-query-solon-web/pom.xml b/samples/easy-query-solon-web/pom.xml index 3fee29be8..1f72f9de1 100644 --- a/samples/easy-query-solon-web/pom.xml +++ b/samples/easy-query-solon-web/pom.xml @@ -6,7 +6,7 @@ com.easy-query samples - 2.0.28 + 2.0.29 com.easy.query.solon @@ -22,13 +22,13 @@ com.easy-query sql-solon-plugin - 2.0.28 + 2.0.29 compile com.easy-query sql-processor - 2.0.28 + 2.0.29 compile diff --git a/samples/multi-datasource-demo/pom.xml b/samples/multi-datasource-demo/pom.xml index f13699d90..fd50e5a5b 100644 --- a/samples/multi-datasource-demo/pom.xml +++ b/samples/multi-datasource-demo/pom.xml @@ -52,7 +52,7 @@ com.easy-query sql-springboot-starter - 2.0.28 + 2.0.29 compile diff --git a/samples/pom.xml b/samples/pom.xml index 8c7165e16..0503b12fd 100644 --- a/samples/pom.xml +++ b/samples/pom.xml @@ -5,7 +5,7 @@ easy-query-all com.easy-query - 2.0.28 + 2.0.29 4.0.0 @@ -44,7 +44,7 @@ com.easy-query sql-springboot-starter - 2.0.28 + 2.0.29 compile diff --git a/samples/solon-sharding-demo/pom.xml b/samples/solon-sharding-demo/pom.xml index b9133e40a..a0df5d466 100644 --- a/samples/solon-sharding-demo/pom.xml +++ b/samples/solon-sharding-demo/pom.xml @@ -6,7 +6,7 @@ com.easy-query samples - 2.0.28 + 2.0.29 com.easy.query @@ -22,7 +22,7 @@ com.easy-query sql-solon-plugin - 2.0.28 + 2.0.29 compile diff --git a/samples/spring-sharding-demo/pom.xml b/samples/spring-sharding-demo/pom.xml index 651ed39e6..c7b8e67d1 100644 --- a/samples/spring-sharding-demo/pom.xml +++ b/samples/spring-sharding-demo/pom.xml @@ -55,13 +55,13 @@ com.easy-query sql-processor - 2.0.28 + 2.0.29 compile com.easy-query sql-springboot-starter - 2.0.28 + 2.0.29 compile diff --git a/samples/springbootdemo/pom.xml b/samples/springbootdemo/pom.xml index e4bd0611d..fab397e53 100644 --- a/samples/springbootdemo/pom.xml +++ b/samples/springbootdemo/pom.xml @@ -62,13 +62,13 @@ com.easy-query sql-processor - 2.0.28 + 2.0.29 compile com.easy-query sql-springboot-starter - 2.0.28 + 2.0.29 compile @@ -90,7 +90,7 @@ com.easy-query sql-cache - 2.0.28 + 2.0.29 compile diff --git a/sql-core/pom.xml b/sql-core/pom.xml index f53087426..bded610d0 100644 --- a/sql-core/pom.xml +++ b/sql-core/pom.xml @@ -5,7 +5,7 @@ easy-query-all com.easy-query - 2.0.28 + 2.0.29 4.0.0 diff --git a/sql-core/src/main/java/com/easy/query/core/annotation/NavigateFlat.java b/sql-core/src/main/java/com/easy/query/core/annotation/NavigateFlat.java index e79872008..3d4af30db 100644 --- a/sql-core/src/main/java/com/easy/query/core/annotation/NavigateFlat.java +++ b/sql-core/src/main/java/com/easy/query/core/annotation/NavigateFlat.java @@ -11,6 +11,8 @@ /** * create time 2024/5/14 08:41 * entity对象表不会生效 + * NavigateFlat支持获取穿透数据库对象到VO + * 如果NavigateFlat了一个VO又在同级对象下获取了这个VO的id那么将会报错 * * @author xuejiaming */ diff --git a/sql-core/src/main/java/com/easy/query/core/basic/api/select/abstraction/AbstractClientQueryable.java b/sql-core/src/main/java/com/easy/query/core/basic/api/select/abstraction/AbstractClientQueryable.java index 3bd7ee32c..e3164f9cc 100644 --- a/sql-core/src/main/java/com/easy/query/core/basic/api/select/abstraction/AbstractClientQueryable.java +++ b/sql-core/src/main/java/com/easy/query/core/basic/api/select/abstraction/AbstractClientQueryable.java @@ -675,7 +675,7 @@ protected void selectAutoInclude0(Class resultClass, boolean replace) { private void selectAutoIncludeFlat0(EntityMetadataManager entityMetadataManager, ClientQueryable clientQueryable, EntityMetadata entityMetadata, EntityMetadata resultEntityMetadata) { Collection navigateFlatMetadatas = resultEntityMetadata.getNavigateFlatMetadatas(); if (EasyCollectionUtil.isNotEmpty(navigateFlatMetadatas)) { - MappingPathTreeNode mappingPathTreeRoot = getMappingPathTree(navigateFlatMetadatas); + MappingPathTreeNode mappingPathTreeRoot = getMappingPathTree(navigateFlatMetadatas, resultEntityMetadata); selectAutoIncludeFlat0(entityMetadataManager, clientQueryable, entityMetadata, mappingPathTreeRoot, true); // for (MappingPathTreeNode mappingPathTree : mappingPathTreeRoot.getChildren()) { // @@ -703,11 +703,16 @@ private void selectAutoIncludeJoin0(Class resultClass, ClientQueryable< } } - private MappingPathTreeNode getMappingPathTree(Collection navigateFlatMetadataCollection) { + private MappingPathTreeNode getMappingPathTree(Collection navigateFlatMetadataCollection, EntityMetadata navigateEntityMetadata) { MappingPathTreeNode root = new MappingPathTreeNode("EASY-QUERY-ROOT"); for (NavigateFlatMetadata navigateFlatMetadata : navigateFlatMetadataCollection) { String[] mappingPath = navigateFlatMetadata.getMappingPath(); - MappingPathTreeBuilder.insertPath(root, mappingPath, navigateFlatMetadata); + MappingPathTreeBuilder.insertPath(root, mappingPath, navigateFlatMetadata, path -> { + NavigateMetadata navigateOrNull = navigateEntityMetadata.getNavigateOrNull(path); + if (navigateOrNull != null) { + throw new EasyQueryInvalidOperationException(String.format("In the selectAutoInclude query, the relational propoerty [%s] of the class [%s] should appear in both @Navigate and @NavigateFlat.", path, EasyClassUtil.getSimpleName(navigateEntityMetadata.getEntityClass()))); + } + }); } return root; // return EasyUtil.groupBy(navigateFlatMetadataCollection.stream(), o -> o.getMappingPath()[0]) @@ -784,7 +789,7 @@ private void selectAutoIncludeFlat0(EntityMetadataManager entityMetadataManager, } // List flatProperties = navigateFlatGroupProperty.values().collect(Collectors.toList()); //获取当前属性没有后续的属性了的 path最后一个是navigate那么就不可以是自定义dto只能是table - boolean basicType = mappingPathTreeChild.getNavigateFlatMetadataList().stream().anyMatch(o -> !o.isBasicType()&&o.getMappingPath().length==mappingPathTreeChild.getDeep()); + boolean basicType = mappingPathTreeChild.getNavigateFlatMetadataList().stream().anyMatch(o -> !o.isBasicType() && o.getMappingPath().length == mappingPathTreeChild.getDeep()); // List customPathTypes = mappingPathTreeChild.getChildren().stream().filter(o -> !o.getNavigateFlatMetadata().isBasicType() && !o.hasChildren()).collect(Collectors.toList()); // String navigatePropName = resultNavigateMetadata.isBasicType() ? resultNavigateMetadata.getMappingProp().split("//.")[0] : resultNavigateMetadata.getPropertyName(); @@ -796,6 +801,7 @@ private void selectAutoIncludeFlat0(EntityMetadataManager entityMetadataManager, return o.anyBasicType() && o.allBasicType(size) && !o.hasChildren(); }).collect(Collectors.toList()); + clientQueryable .include(t -> { if (first) { @@ -812,18 +818,25 @@ private void selectAutoIncludeFlat0(EntityMetadataManager entityMetadataManager, // } selectAutoIncludeFlat0(entityMetadataManager, with, entityEntityMetadata, mappingPathTreeChild, false); - if (basicType && mappingPathTreeChild.anyBasicType()) { + if (basicType) { //检查是否存在自定义dto - List navigateFlatMetadataList = mappingPathTreeChild.getNavigateFlatMetadataList().stream().filter(o -> !o.isBasicType()).collect(Collectors.toList()); - for (NavigateFlatMetadata navigateFlatMetadata : navigateFlatMetadataList) { + List navigateFlatMetadataList = mappingPathTreeChild.getNavigateFlatMetadataList().stream().filter(o -> !o.isBasicType() && o.getMappingPath().length == mappingPathTreeChild.getDeep() && Objects.equals(propertyName, o.getMappingPath()[o.getMappingPath().length - 1])).collect(Collectors.toList()); + if (EasyCollectionUtil.isNotEmpty(navigateFlatMetadataList)) { + if (EasyCollectionUtil.isNotSingle(navigateFlatMetadataList)) { + throw new EasyQueryInvalidOperationException(String.format("In the class [%s], @NavigateFlat only allows one associated attribute: [%s] to exist.", EasyClassUtil.getSimpleName(entityMetadata.getEntityClass()), propertyName)); + } + NavigateFlatMetadata navigateFlatMetadata = EasyCollectionUtil.first(navigateFlatMetadataList); Class navigatePropertyType = navigateFlatMetadata.getNavigatePropertyType(); - if (Objects.equals(propertyName, mappingPathTreeChild.getName()) && !Objects.equals(with.queryClass(), navigatePropertyType)) { - throw new EasyQueryInvalidOperationException("NavigateFlat only supports basic types and database types"); + //表示VO对象并不是最终的对象 + if (mappingPathTreeChild.hasChildren()) { + if (EasyCollectionUtil.isEmpty(navigateFlatBasicProps) && !Objects.equals(with.queryClass(), navigatePropertyType)) { + throw new EasyQueryInvalidOperationException(String.format("@NavigateFlat cannot simultaneously include non-database related objects: [%s] and its object properties.", EasyClassUtil.getSimpleName(navigatePropertyType))); + } } + t.getIncludeNavigateParams().setFlatClassType(navigatePropertyType); } - } - if (!(basicType && mappingPathTreeChild.anyBasicType())) { + } else { if (EasyCollectionUtil.isNotEmpty(navigateFlatBasicProps)) { with = with.select(z -> { for (MappingPathTreeNode navigateFlatBasicProp : navigateFlatBasicProps) { diff --git a/sql-core/src/main/java/com/easy/query/core/expression/include/EasyFlatIncludeProcessor.java b/sql-core/src/main/java/com/easy/query/core/expression/include/EasyFlatIncludeProcessor.java index 547e1dbad..d3f107b87 100644 --- a/sql-core/src/main/java/com/easy/query/core/expression/include/EasyFlatIncludeProcessor.java +++ b/sql-core/src/main/java/com/easy/query/core/expression/include/EasyFlatIncludeProcessor.java @@ -33,10 +33,10 @@ public EasyFlatIncludeProcessor(NavigateFlatMetadata navigateFlatMetadata, Inclu super(includeParserResult, runtimeContext); this.navigateFlatMetadata = navigateFlatMetadata; //生成多个targetNaviaget在process的时候for调用 - initNavigateFlatGetter(includeParserResult.getFlatQueryEntityMetadata(),navigateFlatMetadata,runtimeContext); + initNavigateFlatGetter(includeParserResult,includeParserResult.getFlatQueryEntityMetadata(),navigateFlatMetadata,runtimeContext); } - public void initNavigateFlatGetter(EntityMetadata flatQueryEntityMetadata, NavigateFlatMetadata navigateFlatMetadata, QueryRuntimeContext runtimeContext){ + public void initNavigateFlatGetter(IncludeParserResult includeParserResult,EntityMetadata flatQueryEntityMetadata, NavigateFlatMetadata navigateFlatMetadata, QueryRuntimeContext runtimeContext){ if(navigateFlatMetadata==null){ return; } diff --git a/sql-core/src/main/java/com/easy/query/core/expression/sql/include/DefaultIncludeParserEngine.java b/sql-core/src/main/java/com/easy/query/core/expression/sql/include/DefaultIncludeParserEngine.java index bcd71518d..525784b1d 100644 --- a/sql-core/src/main/java/com/easy/query/core/expression/sql/include/DefaultIncludeParserEngine.java +++ b/sql-core/src/main/java/com/easy/query/core/expression/sql/include/DefaultIncludeParserEngine.java @@ -281,7 +281,8 @@ private void confirmNavigateProperty(boolean aliasEntity, ExpressionContext expr includeParseContext.setIncludeQueryableExpression(() -> { ClientQueryable includeQueryable = includeQueryableExpression.apply(); EntityQueryExpressionBuilder sqlEntityExpressionBuilder = includeQueryable.getSQLEntityExpressionBuilder(); - includeQueryable.select(aliasNavigateMetadata.getNavigatePropertyType(), t -> { + Class aliasClassType = includeParseContext.getIncludeNavigateParams().getFlatClassType() == null ? aliasNavigateMetadata.getNavigatePropertyType() : includeParseContext.getIncludeNavigateParams().getFlatClassType(); + includeQueryable.select(aliasClassType, t -> { t.columnAll(); EasySQLExpressionUtil.appendTargetExtraTargetProperty(selfNavigateMetadata, sqlEntityExpressionBuilder, t.getSQLNative(), t.getTable()); }); @@ -295,7 +296,9 @@ private void confirmNavigateProperty(boolean aliasEntity, ExpressionContext expr includeParseContext.setIncludeQueryableExpression(() -> { ClientQueryable includeQueryable = includeQueryableExpression.apply(); EntityQueryExpressionBuilder sqlEntityExpressionBuilder = includeQueryable.getSQLEntityExpressionBuilder(); - return includeQueryable.select(aliasNavigateMetadata.getNavigatePropertyType(), t -> { + Class aliasClassType = includeParseContext.getIncludeNavigateParams().getFlatClassType() == null ? aliasNavigateMetadata.getNavigatePropertyType() : includeParseContext.getIncludeNavigateParams().getFlatClassType(); + + return includeQueryable.select(aliasClassType, t -> { columnIncludeExpression.getIncludeSelectorExpression().apply(t.getAsSelector()); EasySQLExpressionUtil.appendSelfExtraTargetProperty(sqlEntityExpressionBuilder, t.getSQLNative(), t.getTable()); EasySQLExpressionUtil.appendTargetExtraTargetProperty(selfNavigateMetadata, sqlEntityExpressionBuilder, t.getSQLNative(), t.getTable()); diff --git a/sql-core/src/main/java/com/easy/query/core/metadata/EntityMetadata.java b/sql-core/src/main/java/com/easy/query/core/metadata/EntityMetadata.java index 3311a670d..6e50e93d3 100644 --- a/sql-core/src/main/java/com/easy/query/core/metadata/EntityMetadata.java +++ b/sql-core/src/main/java/com/easy/query/core/metadata/EntityMetadata.java @@ -376,7 +376,7 @@ private void createNavigateFlatMappingMetadata(NavigateFlat navigateFlat, Map beanGetter = fastBean.getBeanGetter(fastBeanProperty); PropertySetterCaller beanSetter = fastBean.getBeanSetter(fastBeanProperty); - NavigateFlatMetadata navigateFlatMetadata = new NavigateFlatMetadata(this, relationMappingType, mappingPath, navigateType, EasyClassUtil.isBasicTypeOrEnum(navigateType), beanSetter); + NavigateFlatMetadata navigateFlatMetadata = new NavigateFlatMetadata(this, relationMappingType, mappingPath, navigateType, EasyClassUtil.isBasicTypeOrEnum(navigateType), beanSetter,property); property2NavigateFlatMap.put(property, navigateFlatMetadata); } diff --git a/sql-core/src/main/java/com/easy/query/core/metadata/IncludeNavigateParams.java b/sql-core/src/main/java/com/easy/query/core/metadata/IncludeNavigateParams.java index 2e327f34d..f575b436c 100644 --- a/sql-core/src/main/java/com/easy/query/core/metadata/IncludeNavigateParams.java +++ b/sql-core/src/main/java/com/easy/query/core/metadata/IncludeNavigateParams.java @@ -26,6 +26,7 @@ public class IncludeNavigateParams implements IncludeRelationIdAvailable { private boolean mappingFlat=false; private List navigateFlatMetadataList; private EntityMetadata flatQueryEntityMetadata; + private Class flatClassType; public IncludeNavigateParams(){ relationIds =new ArrayList<>(); } @@ -109,6 +110,14 @@ public void setFlatQueryEntityMetadata(EntityMetadata flatQueryEntityMetadata) { this.flatQueryEntityMetadata = flatQueryEntityMetadata; } + public Class getFlatClassType() { + return flatClassType; + } + + public void setFlatClassType(Class flatClassType) { + this.flatClassType = flatClassType; + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/sql-core/src/main/java/com/easy/query/core/metadata/MappingPathTreeBuilder.java b/sql-core/src/main/java/com/easy/query/core/metadata/MappingPathTreeBuilder.java index a61995b54..2ae971714 100644 --- a/sql-core/src/main/java/com/easy/query/core/metadata/MappingPathTreeBuilder.java +++ b/sql-core/src/main/java/com/easy/query/core/metadata/MappingPathTreeBuilder.java @@ -1,5 +1,7 @@ package com.easy.query.core.metadata; +import java.util.function.Consumer; + /** * create time 2024/6/12 17:52 * 文件说明 @@ -7,10 +9,11 @@ * @author xuejiaming */ public class MappingPathTreeBuilder { - public static void insertPath(MappingPathTreeNode root, String[] path, NavigateFlatMetadata navigateFlatMetadata) { + public static void insertPath(MappingPathTreeNode root, String[] path, NavigateFlatMetadata navigateFlatMetadata, Consumer checkInNavigateConsumer) { MappingPathTreeNode currentNode = root; for (String part : path) { + checkInNavigateConsumer.accept(part); MappingPathTreeNode childNode = currentNode.findChild(part); if (childNode == null) { childNode = new MappingPathTreeNode(part); diff --git a/sql-core/src/main/java/com/easy/query/core/metadata/NavigateFlatMetadata.java b/sql-core/src/main/java/com/easy/query/core/metadata/NavigateFlatMetadata.java index fe376ff9d..a0388bd44 100644 --- a/sql-core/src/main/java/com/easy/query/core/metadata/NavigateFlatMetadata.java +++ b/sql-core/src/main/java/com/easy/query/core/metadata/NavigateFlatMetadata.java @@ -20,19 +20,22 @@ public class NavigateFlatMetadata { private final Class navigatePropertyType; private final boolean basicType; private final PropertySetterCaller beanSetter; + private final String property; public NavigateFlatMetadata(EntityMetadata entityMetadata, RelationMappingTypeEnum relationMappingType, String[] mappingPath, Class navigatePropertyType, boolean basicType, - PropertySetterCaller beanSetter) { + PropertySetterCaller beanSetter, + String property) { this.entityMetadata = entityMetadata; this.relationMappingType = relationMappingType; this.mappingPath = mappingPath; this.navigatePropertyType = navigatePropertyType; this.basicType=basicType; this.beanSetter = beanSetter; + this.property = property; } public EntityMetadata getEntityMetadata() { @@ -58,4 +61,8 @@ public PropertySetterCaller getBeanSetter() { public Class getNavigatePropertyType() { return navigatePropertyType; } + + public String getProperty() { + return property; + } } diff --git a/sql-db-support/pom.xml b/sql-db-support/pom.xml index d7506c865..c7a303499 100644 --- a/sql-db-support/pom.xml +++ b/sql-db-support/pom.xml @@ -6,7 +6,7 @@ com.easy-query easy-query-all - 2.0.28 + 2.0.29 sql-db-support diff --git a/sql-db-support/sql-clickhouse/pom.xml b/sql-db-support/sql-clickhouse/pom.xml index a245cef30..eb70a952b 100644 --- a/sql-db-support/sql-clickhouse/pom.xml +++ b/sql-db-support/sql-clickhouse/pom.xml @@ -6,7 +6,7 @@ com.easy-query easy-query-all - 2.0.28 + 2.0.29 ../../pom.xml diff --git a/sql-db-support/sql-dameng/pom.xml b/sql-db-support/sql-dameng/pom.xml index 86ae7cc3c..cc0a16bb6 100644 --- a/sql-db-support/sql-dameng/pom.xml +++ b/sql-db-support/sql-dameng/pom.xml @@ -6,7 +6,7 @@ com.easy-query easy-query-all - 2.0.28 + 2.0.29 ../../pom.xml diff --git a/sql-db-support/sql-gauss-db/pom.xml b/sql-db-support/sql-gauss-db/pom.xml index 3ea9b1211..64ddcccc6 100644 --- a/sql-db-support/sql-gauss-db/pom.xml +++ b/sql-db-support/sql-gauss-db/pom.xml @@ -6,7 +6,7 @@ com.easy-query easy-query-all - 2.0.28 + 2.0.29 ../../pom.xml diff --git a/sql-db-support/sql-h2/pom.xml b/sql-db-support/sql-h2/pom.xml index 2cf7a6a6b..981fe5fb5 100644 --- a/sql-db-support/sql-h2/pom.xml +++ b/sql-db-support/sql-h2/pom.xml @@ -6,7 +6,7 @@ com.easy-query easy-query-all - 2.0.28 + 2.0.29 ../../pom.xml diff --git a/sql-db-support/sql-kingbase-es/pom.xml b/sql-db-support/sql-kingbase-es/pom.xml index 77c455f72..a882cccaf 100644 --- a/sql-db-support/sql-kingbase-es/pom.xml +++ b/sql-db-support/sql-kingbase-es/pom.xml @@ -6,7 +6,7 @@ com.easy-query easy-query-all - 2.0.28 + 2.0.29 ../../pom.xml sql-kingbase-es diff --git a/sql-db-support/sql-mssql/pom.xml b/sql-db-support/sql-mssql/pom.xml index f751dd8a8..6fb7e6060 100644 --- a/sql-db-support/sql-mssql/pom.xml +++ b/sql-db-support/sql-mssql/pom.xml @@ -6,7 +6,7 @@ com.easy-query easy-query-all - 2.0.28 + 2.0.29 ../../pom.xml diff --git a/sql-db-support/sql-mysql/pom.xml b/sql-db-support/sql-mysql/pom.xml index 28ec42dd4..986a8dc68 100644 --- a/sql-db-support/sql-mysql/pom.xml +++ b/sql-db-support/sql-mysql/pom.xml @@ -6,7 +6,7 @@ com.easy-query easy-query-all - 2.0.28 + 2.0.29 ../../pom.xml diff --git a/sql-db-support/sql-oracle/pom.xml b/sql-db-support/sql-oracle/pom.xml index 2967f7194..e44bef29e 100644 --- a/sql-db-support/sql-oracle/pom.xml +++ b/sql-db-support/sql-oracle/pom.xml @@ -6,7 +6,7 @@ com.easy-query easy-query-all - 2.0.28 + 2.0.29 ../../pom.xml diff --git a/sql-db-support/sql-pgsql/pom.xml b/sql-db-support/sql-pgsql/pom.xml index 6166cfd36..c2f88dfd1 100644 --- a/sql-db-support/sql-pgsql/pom.xml +++ b/sql-db-support/sql-pgsql/pom.xml @@ -6,7 +6,7 @@ com.easy-query easy-query-all - 2.0.28 + 2.0.29 ../../pom.xml diff --git a/sql-db-support/sql-sqlite/pom.xml b/sql-db-support/sql-sqlite/pom.xml index 8840ea6cd..43fd04af9 100644 --- a/sql-db-support/sql-sqlite/pom.xml +++ b/sql-db-support/sql-sqlite/pom.xml @@ -6,7 +6,7 @@ com.easy-query easy-query-all - 2.0.28 + 2.0.29 ../../pom.xml diff --git a/sql-extension/pom.xml b/sql-extension/pom.xml index c252e69b0..1fe0be3f9 100644 --- a/sql-extension/pom.xml +++ b/sql-extension/pom.xml @@ -6,7 +6,7 @@ com.easy-query easy-query-all - 2.0.28 + 2.0.29 sql-extension diff --git a/sql-extension/sql-cache/pom.xml b/sql-extension/sql-cache/pom.xml index 5aa778e41..192f70c21 100644 --- a/sql-extension/sql-cache/pom.xml +++ b/sql-extension/sql-cache/pom.xml @@ -6,7 +6,7 @@ com.easy-query easy-query-all - 2.0.28 + 2.0.29 ../../pom.xml diff --git a/sql-extension/sql-kt-springboot-starter/pom.xml b/sql-extension/sql-kt-springboot-starter/pom.xml index 5357e8bb8..66781fdfc 100644 --- a/sql-extension/sql-kt-springboot-starter/pom.xml +++ b/sql-extension/sql-kt-springboot-starter/pom.xml @@ -6,7 +6,7 @@ com.easy-query easy-query-all - 2.0.28 + 2.0.29 ../../pom.xml diff --git a/sql-extension/sql-solon-plugin/pom.xml b/sql-extension/sql-solon-plugin/pom.xml index 76dfcbf49..f439309eb 100644 --- a/sql-extension/sql-solon-plugin/pom.xml +++ b/sql-extension/sql-solon-plugin/pom.xml @@ -6,7 +6,7 @@ com.easy-query easy-query-all - 2.0.28 + 2.0.29 ../../pom.xml diff --git a/sql-extension/sql-springboot-starter/pom.xml b/sql-extension/sql-springboot-starter/pom.xml index 0b6254303..abe60f12f 100644 --- a/sql-extension/sql-springboot-starter/pom.xml +++ b/sql-extension/sql-springboot-starter/pom.xml @@ -6,7 +6,7 @@ com.easy-query easy-query-all - 2.0.28 + 2.0.29 ../../pom.xml diff --git a/sql-platform/pom.xml b/sql-platform/pom.xml index 8775d9c8e..cf11cdef2 100644 --- a/sql-platform/pom.xml +++ b/sql-platform/pom.xml @@ -6,7 +6,7 @@ com.easy-query easy-query-all - 2.0.28 + 2.0.29 sql-platform diff --git a/sql-platform/sql-api-proxy/pom.xml b/sql-platform/sql-api-proxy/pom.xml index 5787546b1..c3d88f446 100644 --- a/sql-platform/sql-api-proxy/pom.xml +++ b/sql-platform/sql-api-proxy/pom.xml @@ -6,7 +6,7 @@ com.easy-query sql-platform - 2.0.28 + 2.0.29 sql-api-proxy diff --git a/sql-platform/sql-api4j/pom.xml b/sql-platform/sql-api4j/pom.xml index 7e65e2ac1..b90c16b05 100644 --- a/sql-platform/sql-api4j/pom.xml +++ b/sql-platform/sql-api4j/pom.xml @@ -6,7 +6,7 @@ com.easy-query easy-query-all - 2.0.28 + 2.0.29 ../../pom.xml diff --git a/sql-platform/sql-api4kt/pom.xml b/sql-platform/sql-api4kt/pom.xml index f903796c7..a226ff410 100644 --- a/sql-platform/sql-api4kt/pom.xml +++ b/sql-platform/sql-api4kt/pom.xml @@ -6,7 +6,7 @@ com.easy-query easy-query-all - 2.0.28 + 2.0.29 ../../pom.xml diff --git a/sql-processor/pom.xml b/sql-processor/pom.xml index 5f0d97ac1..dd26cd79c 100644 --- a/sql-processor/pom.xml +++ b/sql-processor/pom.xml @@ -6,7 +6,7 @@ com.easy-query easy-query-all - 2.0.28 + 2.0.29 sql-processor diff --git a/sql-test/pom.xml b/sql-test/pom.xml index 99ea8a4d8..b23134480 100644 --- a/sql-test/pom.xml +++ b/sql-test/pom.xml @@ -5,7 +5,7 @@ easy-query-all com.easy-query - 2.0.28 + 2.0.29 4.0.0 @@ -95,7 +95,7 @@ com.easy-query sql-api4kt - 2.0.28 + 2.0.29 compile diff --git a/sql-test/src/main/java/com/easy/query/test/RelationTest.java b/sql-test/src/main/java/com/easy/query/test/RelationTest.java index 45f5b60f1..915dc6126 100644 --- a/sql-test/src/main/java/com/easy/query/test/RelationTest.java +++ b/sql-test/src/main/java/com/easy/query/test/RelationTest.java @@ -11,6 +11,7 @@ import com.easy.query.test.dto.autodto.SchoolClassAOProp; import com.easy.query.test.dto.autodto.SchoolClassAOProp10; import com.easy.query.test.dto.autodto.SchoolClassAOProp11; +import com.easy.query.test.dto.autodto.SchoolClassAOProp12; import com.easy.query.test.dto.autodto.SchoolClassAOProp2; import com.easy.query.test.dto.autodto.SchoolClassAOProp3; import com.easy.query.test.dto.autodto.SchoolClassAOProp4; @@ -18,6 +19,7 @@ import com.easy.query.test.dto.autodto.SchoolClassAOProp6; import com.easy.query.test.dto.autodto.SchoolClassAOProp8; import com.easy.query.test.dto.autodto.SchoolClassAOProp9; +import com.easy.query.test.dto.autodto.SchoolStudentDTOxxx; import com.easy.query.test.entity.Topic; import com.easy.query.test.entity.base.Area; import com.easy.query.test.entity.base.City; @@ -175,16 +177,81 @@ public void testOneToOne() { { System.out.println("4"); - boolean exception=true; + boolean exception = true; try { - List list = easyEntityQuery.queryable(SchoolClass.class) - .selectAutoInclude(SchoolClassAOProp5.class) + List list = easyEntityQuery.queryable(SchoolClass.class) + .selectAutoInclude(SchoolClassAOProp12.class) .toList(); - exception=false; + exception = false; - }catch (Exception ex){ - Assert.assertTrue(ex instanceof EasyQueryInvalidOperationException); - Assert.assertEquals("NavigateFlat only supports basic types and database types",ex.getMessage()); + } catch (Exception ex) { + Assert.assertTrue(ex instanceof EasyQueryInvalidOperationException); + Assert.assertEquals("@NavigateFlat cannot simultaneously include non-database related objects: [SchoolStudentAO] and its object properties.", ex.getMessage()); + } + Assert.assertTrue(exception); + System.out.println("1"); + + } + + { + System.out.println("4"); + ListenerContext listenerContext = new ListenerContext(true); + listenerContextManager.startListen(listenerContext); + int i = 0; + List list = easyEntityQuery.queryable(SchoolClass.class) + .selectAutoInclude(SchoolClassAOProp5.class) + .toList(); + for (SchoolClassAOProp5 schoolClassAOProp5 : list) { + for (SchoolClassAOProp5.SchoolStudentAO schoolStudentAO : schoolClassAOProp5.getSchoolTeachersClassList()) { + i++; + } + } + Assert.assertTrue(i>0); + + Assert.assertNotNull(listenerContext.getJdbcExecuteAfterArgs()); + Assert.assertEquals(5, listenerContext.getJdbcExecuteAfterArgs().size()); + + { + + JdbcExecuteAfterArg jdbcExecuteAfterArg = listenerContext.getJdbcExecuteAfterArgs().get(0); + Assert.assertEquals("SELECT t.`name`,t.`id` AS `__relation__id` FROM `school_class` t", jdbcExecuteAfterArg.getBeforeArg().getSql()); +// Assert.assertEquals("1(Integer)", EasySQLUtil.sqlParameterToString(jdbcExecuteAfterArg.getBeforeArg().getSqlParameters().get(0))); + } + { + JdbcExecuteAfterArg jdbcExecuteAfterArg = listenerContext.getJdbcExecuteAfterArgs().get(1); + Assert.assertEquals("SELECT `class_id`,`teacher_id` FROM `school_class_teacher` WHERE `class_id` IN (?,?,?)", jdbcExecuteAfterArg.getBeforeArg().getSql()); + Assert.assertEquals("class1(String),class2(String),class3(String)", EasySQLUtil.sqlParameterToString(jdbcExecuteAfterArg.getBeforeArg().getSqlParameters().get(0))); + } + { + JdbcExecuteAfterArg jdbcExecuteAfterArg = listenerContext.getJdbcExecuteAfterArgs().get(2); + Assert.assertEquals("SELECT `id`,`name` FROM `school_teacher` WHERE `id` IN (?,?)", jdbcExecuteAfterArg.getBeforeArg().getSql()); + Assert.assertEquals("teacher1(String),teacher2(String)", EasySQLUtil.sqlParameterToString(jdbcExecuteAfterArg.getBeforeArg().getSqlParameters().get(0))); + } + { + JdbcExecuteAfterArg jdbcExecuteAfterArg = listenerContext.getJdbcExecuteAfterArgs().get(3); + Assert.assertEquals("SELECT `teacher_id`,`class_id` FROM `school_class_teacher` WHERE `teacher_id` IN (?,?)", jdbcExecuteAfterArg.getBeforeArg().getSql()); + Assert.assertEquals("teacher1(String),teacher2(String)", EasySQLUtil.sqlParameterToString(jdbcExecuteAfterArg.getBeforeArg().getSqlParameters().get(0))); + } + { + JdbcExecuteAfterArg jdbcExecuteAfterArg = listenerContext.getJdbcExecuteAfterArgs().get(4); + Assert.assertEquals("SELECT t.`id` FROM `school_class` t WHERE t.`id` IN (?,?)", jdbcExecuteAfterArg.getBeforeArg().getSql()); + Assert.assertEquals("class1(String),class2(String)", EasySQLUtil.sqlParameterToString(jdbcExecuteAfterArg.getBeforeArg().getSqlParameters().get(0))); + } + + System.out.println("1"); + } + { + System.out.println("4"); + boolean exception = true; + try { + List list = easyEntityQuery.queryable(SchoolStudent.class) + .selectAutoInclude(SchoolStudentDTOxxx.class) + .toList(); + exception = false; + + } catch (Exception ex) { + Assert.assertTrue(ex instanceof EasyQueryInvalidOperationException); + Assert.assertEquals("In the selectAutoInclude query, the relational propoerty [schoolClass] of the class [SchoolStudentDTOxxx] should appear in both @Navigate and @NavigateFlat.", ex.getMessage()); } Assert.assertTrue(exception); System.out.println("1"); @@ -209,8 +276,8 @@ public void testOneToOne() { Assert.assertTrue(schoolTeachersClassId1s.contains("班级1")); Assert.assertTrue(schoolTeachersClassId1s.contains("班级2")); Assert.assertEquals(2, schoolTeachersClassId1s.size()); - Assert.assertTrue(schoolTeachersClassList.stream().anyMatch(o->Objects.equals("class1",o.getId())&&Objects.equals("班级1",o.getName()))); - Assert.assertTrue(schoolTeachersClassList.stream().anyMatch(o->Objects.equals("class2",o.getId())&&Objects.equals("班级2",o.getName()))); + Assert.assertTrue(schoolTeachersClassList.stream().anyMatch(o -> Objects.equals("class1", o.getId()) && Objects.equals("班级1", o.getName()))); + Assert.assertTrue(schoolTeachersClassList.stream().anyMatch(o -> Objects.equals("class2", o.getId()) && Objects.equals("班级2", o.getName()))); Assert.assertEquals(2, schoolTeachersClassList.size()); } else if (schoolClassAOProp2.getName().equals("班级2")) { Assert.assertTrue(schoolStudentsIds.contains("2")); @@ -218,8 +285,8 @@ public void testOneToOne() { Assert.assertTrue(schoolTeachersClassId1s.contains("班级1")); Assert.assertTrue(schoolTeachersClassId1s.contains("班级2")); Assert.assertEquals(2, schoolTeachersClassId1s.size()); - Assert.assertTrue(schoolTeachersClassList.stream().anyMatch(o->Objects.equals("class1",o.getId())&&Objects.equals("班级1",o.getName()))); - Assert.assertTrue(schoolTeachersClassList.stream().anyMatch(o->Objects.equals("class2",o.getId())&&Objects.equals("班级2",o.getName()))); + Assert.assertTrue(schoolTeachersClassList.stream().anyMatch(o -> Objects.equals("class1", o.getId()) && Objects.equals("班级1", o.getName()))); + Assert.assertTrue(schoolTeachersClassList.stream().anyMatch(o -> Objects.equals("class2", o.getId()) && Objects.equals("班级2", o.getName()))); Assert.assertEquals(2, schoolTeachersClassList.size()); } else { Assert.assertTrue(schoolStudentsIds.isEmpty()); @@ -338,29 +405,29 @@ public void testOneToOne() { System.out.println("4"); ListenerContext listenerContext = new ListenerContext(true); listenerContextManager.startListen(listenerContext); - List list = easyEntityQuery.queryable(SchoolClass.class) - .selectAutoInclude(SchoolClassAOProp10.class) - .toList(); + List list = easyEntityQuery.queryable(SchoolClass.class) + .selectAutoInclude(SchoolClassAOProp10.class) + .toList(); - Assert.assertNotNull(listenerContext.getJdbcExecuteAfterArgs()); - Assert.assertEquals(3, listenerContext.getJdbcExecuteAfterArgs().size()); + Assert.assertNotNull(listenerContext.getJdbcExecuteAfterArgs()); + Assert.assertEquals(3, listenerContext.getJdbcExecuteAfterArgs().size()); - { + { - JdbcExecuteAfterArg jdbcExecuteAfterArg = listenerContext.getJdbcExecuteAfterArgs().get(0); - Assert.assertEquals("SELECT t.`name`,t.`id` AS `__relation__id` FROM `school_class` t", jdbcExecuteAfterArg.getBeforeArg().getSql()); + JdbcExecuteAfterArg jdbcExecuteAfterArg = listenerContext.getJdbcExecuteAfterArgs().get(0); + Assert.assertEquals("SELECT t.`name`,t.`id` AS `__relation__id` FROM `school_class` t", jdbcExecuteAfterArg.getBeforeArg().getSql()); // Assert.assertEquals("1(Integer)", EasySQLUtil.sqlParameterToString(jdbcExecuteAfterArg.getBeforeArg().getSqlParameters().get(0))); - } - { - JdbcExecuteAfterArg jdbcExecuteAfterArg = listenerContext.getJdbcExecuteAfterArgs().get(1); - Assert.assertEquals("SELECT t.`id`,t.`name`,t1.`address` AS `stu_address`,t.`class_id` AS `__relation__classId` FROM `school_student` t LEFT JOIN `school_student_address` t1 ON t1.`student_id` = t.`id` WHERE t.`class_id` IN (?,?,?)", jdbcExecuteAfterArg.getBeforeArg().getSql()); - Assert.assertEquals("class1(String),class2(String),class3(String)", EasySQLUtil.sqlParameterToString(jdbcExecuteAfterArg.getBeforeArg().getSqlParameters().get(0))); - } - { - JdbcExecuteAfterArg jdbcExecuteAfterArg = listenerContext.getJdbcExecuteAfterArgs().get(2); - Assert.assertEquals("SELECT `name`,`id` AS `__relation__id` FROM `school_class` WHERE `id` IN (?,?)", jdbcExecuteAfterArg.getBeforeArg().getSql()); - Assert.assertEquals("class1(String),class2(String)", EasySQLUtil.sqlParameterToString(jdbcExecuteAfterArg.getBeforeArg().getSqlParameters().get(0))); - } + } + { + JdbcExecuteAfterArg jdbcExecuteAfterArg = listenerContext.getJdbcExecuteAfterArgs().get(1); + Assert.assertEquals("SELECT t.`id`,t.`name`,t1.`address` AS `stu_address`,t.`class_id` AS `__relation__classId` FROM `school_student` t LEFT JOIN `school_student_address` t1 ON t1.`student_id` = t.`id` WHERE t.`class_id` IN (?,?,?)", jdbcExecuteAfterArg.getBeforeArg().getSql()); + Assert.assertEquals("class1(String),class2(String),class3(String)", EasySQLUtil.sqlParameterToString(jdbcExecuteAfterArg.getBeforeArg().getSqlParameters().get(0))); + } + { + JdbcExecuteAfterArg jdbcExecuteAfterArg = listenerContext.getJdbcExecuteAfterArgs().get(2); + Assert.assertEquals("SELECT `name`,`id` AS `__relation__id` FROM `school_class` WHERE `id` IN (?,?)", jdbcExecuteAfterArg.getBeforeArg().getSql()); + Assert.assertEquals("class1(String),class2(String)", EasySQLUtil.sqlParameterToString(jdbcExecuteAfterArg.getBeforeArg().getSqlParameters().get(0))); + } } @@ -372,7 +439,7 @@ public void testOneToOne() { } { System.out.println("4"); - boolean exception=true; + boolean exception = true; try { List list = easyEntityQuery.queryable(SchoolClass.class) .selectAutoInclude(SchoolClassAOProp8.class) @@ -380,7 +447,7 @@ public void testOneToOne() { boolean anyMatch1 = list.stream().anyMatch(o -> o.getSchoolStudents().size() > 0); Assert.assertTrue(anyMatch1); for (SchoolClassAOProp8 schoolClassAOProp8 : list) { - if(!schoolClassAOProp8.getSchoolStudents().isEmpty()){ + if (!schoolClassAOProp8.getSchoolStudents().isEmpty()) { boolean anyMatch = schoolClassAOProp8.getSchoolStudents().stream().anyMatch(o -> o.getClassNames().size() > 0); Assert.assertTrue(anyMatch); } @@ -390,26 +457,26 @@ public void testOneToOne() { } } } - exception=false; + exception = false; - }catch (Exception ex){ + } catch (Exception ex) { System.out.println(ex.getMessage()); - exception=true; + exception = true; } Assert.assertFalse(exception); System.out.println("1"); } { - boolean exception=true; + boolean exception = true; try { List list = easyEntityQuery.queryable(SchoolStudent.class) .toList(x -> x.schoolStudentAddress().address()); - exception=false; - }catch (Exception ex){ + exception = false; + } catch (Exception ex) { Assert.assertTrue(ex instanceof EasyQueryInvalidOperationException); - Assert.assertEquals(ex.getMessage(),"flatElement result only allowed use in toList"); + Assert.assertEquals(ex.getMessage(), "flatElement result only allowed use in toList"); } Assert.assertTrue(exception); System.out.println(1); @@ -423,8 +490,8 @@ public void testOneToOne() { ListenerContext listenerContext = new ListenerContext(true); listenerContextManager.startListen(listenerContext); List list = easyEntityQuery.queryable(SchoolClass.class) - .leftJoin(Topic.class,(s, t2) -> s.id().eq(t2.id())) - .selectAutoInclude(SchoolClassAOProp6.class,(s,t2)->Select.of( + .leftJoin(Topic.class, (s, t2) -> s.id().eq(t2.id())) + .selectAutoInclude(SchoolClassAOProp6.class, (s, t2) -> Select.of( t2.stars().nullOrDefault(1).as(SchoolClassAOProp6::getName1) )) .toList(); @@ -432,7 +499,7 @@ public void testOneToOne() { List schoolStudentsIds = schoolClassAOProp2.getSchoolStudentsIds(); List schoolTeachersClassId1s = schoolClassAOProp2.getSchoolTeachersClassId1s(); List schoolTeachersClassList = schoolClassAOProp2.getSchoolTeachersClassList(); - Assert.assertEquals("1",schoolClassAOProp2.getName1()); + Assert.assertEquals("1", schoolClassAOProp2.getName1()); if (schoolClassAOProp2.getName().equals("班级1")) { Assert.assertTrue(schoolStudentsIds.contains("1")); Assert.assertTrue(schoolStudentsIds.contains("3")); @@ -440,8 +507,8 @@ public void testOneToOne() { Assert.assertTrue(schoolTeachersClassId1s.contains("班级1")); Assert.assertTrue(schoolTeachersClassId1s.contains("班级2")); Assert.assertEquals(2, schoolTeachersClassId1s.size()); - Assert.assertTrue(schoolTeachersClassList.stream().anyMatch(o->Objects.equals("class1",o.getId())&&Objects.equals("班级1",o.getName()))); - Assert.assertTrue(schoolTeachersClassList.stream().anyMatch(o->Objects.equals("class2",o.getId())&&Objects.equals("班级2",o.getName()))); + Assert.assertTrue(schoolTeachersClassList.stream().anyMatch(o -> Objects.equals("class1", o.getId()) && Objects.equals("班级1", o.getName()))); + Assert.assertTrue(schoolTeachersClassList.stream().anyMatch(o -> Objects.equals("class2", o.getId()) && Objects.equals("班级2", o.getName()))); Assert.assertEquals(2, schoolTeachersClassList.size()); } else if (schoolClassAOProp2.getName().equals("班级2")) { Assert.assertTrue(schoolStudentsIds.contains("2")); @@ -449,8 +516,8 @@ public void testOneToOne() { Assert.assertTrue(schoolTeachersClassId1s.contains("班级1")); Assert.assertTrue(schoolTeachersClassId1s.contains("班级2")); Assert.assertEquals(2, schoolTeachersClassId1s.size()); - Assert.assertTrue(schoolTeachersClassList.stream().anyMatch(o->Objects.equals("class1",o.getId())&&Objects.equals("班级1",o.getName()))); - Assert.assertTrue(schoolTeachersClassList.stream().anyMatch(o->Objects.equals("class2",o.getId())&&Objects.equals("班级2",o.getName()))); + Assert.assertTrue(schoolTeachersClassList.stream().anyMatch(o -> Objects.equals("class1", o.getId()) && Objects.equals("班级1", o.getName()))); + Assert.assertTrue(schoolTeachersClassList.stream().anyMatch(o -> Objects.equals("class2", o.getId()) && Objects.equals("班级2", o.getName()))); Assert.assertEquals(2, schoolTeachersClassList.size()); } else { Assert.assertTrue(schoolStudentsIds.isEmpty()); @@ -517,8 +584,8 @@ public void testOneToOne() { Assert.assertTrue(schoolTeachersClassId1s.contains("班级1")); Assert.assertTrue(schoolTeachersClassId1s.contains("班级2")); Assert.assertEquals(2, schoolTeachersClassId1s.size()); - Assert.assertTrue(schoolTeachersClassList.stream().anyMatch(o->Objects.equals("class1",o.getId())&&Objects.equals("班级1",o.getName()))); - Assert.assertTrue(schoolTeachersClassList.stream().anyMatch(o->Objects.equals("class2",o.getId())&&Objects.equals("班级2",o.getName()))); + Assert.assertTrue(schoolTeachersClassList.stream().anyMatch(o -> Objects.equals("class1", o.getId()) && Objects.equals("班级1", o.getName()))); + Assert.assertTrue(schoolTeachersClassList.stream().anyMatch(o -> Objects.equals("class2", o.getId()) && Objects.equals("班级2", o.getName()))); Assert.assertEquals(2, schoolTeachersClassList.size()); } else if (schoolClassAOProp2.getName().equals("班级2")) { Assert.assertTrue(schoolStudentsIds.contains("2")); @@ -529,8 +596,8 @@ public void testOneToOne() { Assert.assertTrue(schoolTeachersClassId1s.contains("班级1")); Assert.assertTrue(schoolTeachersClassId1s.contains("班级2")); Assert.assertEquals(2, schoolTeachersClassId1s.size()); - Assert.assertTrue(schoolTeachersClassList.stream().anyMatch(o->Objects.equals("class1",o.getId())&&Objects.equals("班级1",o.getName()))); - Assert.assertTrue(schoolTeachersClassList.stream().anyMatch(o->Objects.equals("class2",o.getId())&&Objects.equals("班级2",o.getName()))); + Assert.assertTrue(schoolTeachersClassList.stream().anyMatch(o -> Objects.equals("class1", o.getId()) && Objects.equals("班级1", o.getName()))); + Assert.assertTrue(schoolTeachersClassList.stream().anyMatch(o -> Objects.equals("class2", o.getId()) && Objects.equals("班级2", o.getName()))); Assert.assertEquals(2, schoolTeachersClassList.size()); } else { Assert.assertTrue(schoolStudentsIds.isEmpty()); diff --git a/sql-test/src/main/java/com/easy/query/test/dto/autodto/SchoolClassAOProp12.java b/sql-test/src/main/java/com/easy/query/test/dto/autodto/SchoolClassAOProp12.java new file mode 100644 index 000000000..3cea71f99 --- /dev/null +++ b/sql-test/src/main/java/com/easy/query/test/dto/autodto/SchoolClassAOProp12.java @@ -0,0 +1,40 @@ +package com.easy.query.test.dto.autodto; + +import com.easy.query.core.annotation.NavigateFlat; +import com.easy.query.core.enums.RelationMappingTypeEnum; +import com.easy.query.test.entity.school.SchoolClass; +import lombok.Data; + +import java.util.List; + +/** + * create time 2024/4/12 22:55 + * @see SchoolClass + * + * @author xuejiaming + */ +@Data +public class SchoolClassAOProp12 { + + // @Column(primaryKey = true)//主键 +// private String id; + private String name; + //一对多 一个班级多个学生 +// @Navigate(value = RelationTypeEnum.OneToMany) + //完整配置,property忽略表示对应的主键 +// @Navigate(value = RelationTypeEnum.OneToMany,selfProperty = "id",targetProperty = "classId") + @NavigateFlat(value = RelationMappingTypeEnum.ToMany,mappingPath = {"schoolStudents","id"}) + private List schoolStudentsIds; + @NavigateFlat(value = RelationMappingTypeEnum.ToMany,mappingPath = {"schoolTeachers","schoolClasses","id"}) + private List schoolTeachersClassIds; + @NavigateFlat(value = RelationMappingTypeEnum.ToMany,mappingPath = {"schoolTeachers","schoolClasses","name"}) + private List schoolTeachersClassId1s; + @NavigateFlat(value = RelationMappingTypeEnum.ToMany,mappingPath = {"schoolTeachers","schoolClasses"}) + private List schoolTeachersClassList; + + @Data + public static class SchoolStudentAO{ + private String id; + private String name; + } +} diff --git a/sql-test/src/main/java/com/easy/query/test/dto/autodto/SchoolClassAOProp5.java b/sql-test/src/main/java/com/easy/query/test/dto/autodto/SchoolClassAOProp5.java index 4410b1f25..ad3419aef 100644 --- a/sql-test/src/main/java/com/easy/query/test/dto/autodto/SchoolClassAOProp5.java +++ b/sql-test/src/main/java/com/easy/query/test/dto/autodto/SchoolClassAOProp5.java @@ -23,18 +23,18 @@ public class SchoolClassAOProp5 { // @Navigate(value = RelationTypeEnum.OneToMany) //完整配置,property忽略表示对应的主键 // @Navigate(value = RelationTypeEnum.OneToMany,selfProperty = "id",targetProperty = "classId") - @NavigateFlat(value = RelationMappingTypeEnum.ToMany,mappingPath = {"schoolStudents","id"}) - private List schoolStudentsIds; - @NavigateFlat(value = RelationMappingTypeEnum.ToMany,mappingPath = {"schoolTeachers","schoolClasses","id"}) - private List schoolTeachersClassIds; - @NavigateFlat(value = RelationMappingTypeEnum.ToMany,mappingPath = {"schoolTeachers","schoolClasses","name"}) - private List schoolTeachersClassId1s; +// @NavigateFlat(value = RelationMappingTypeEnum.ToMany,mappingPath = {"schoolStudents","id"}) +// private List schoolStudentsIds; +// @NavigateFlat(value = RelationMappingTypeEnum.ToMany,mappingPath = {"schoolTeachers","schoolClasses","id"}) +// private List schoolTeachersClassIds; +// @NavigateFlat(value = RelationMappingTypeEnum.ToMany,mappingPath = {"schoolTeachers","schoolClasses","name"}) +// private List schoolTeachersClassId1s; @NavigateFlat(value = RelationMappingTypeEnum.ToMany,mappingPath = {"schoolTeachers","schoolClasses"}) private List schoolTeachersClassList; @Data public static class SchoolStudentAO{ private String id; - private String name; +// private String name; } } diff --git a/sql-test/src/main/java/com/easy/query/test/dto/autodto/SchoolStudentDTOxxx.java b/sql-test/src/main/java/com/easy/query/test/dto/autodto/SchoolStudentDTOxxx.java new file mode 100644 index 000000000..ab432488e --- /dev/null +++ b/sql-test/src/main/java/com/easy/query/test/dto/autodto/SchoolStudentDTOxxx.java @@ -0,0 +1,57 @@ +package com.easy.query.test.dto.autodto; + + +import com.easy.query.core.annotation.Navigate; +import com.easy.query.core.annotation.NavigateFlat; +import com.easy.query.core.enums.RelationTypeEnum; +import com.easy.query.test.entity.school.SchoolClass; +import lombok.Data; + +/** + * this file automatically generated by easy-query struct dto mapping + * 当前文件是easy-query自动生成的 结构化dto 映射 + * {@link com.easy.query.test.entity.school.SchoolStudent } + * + * @author easy-query + */ +@Data +public class SchoolStudentDTOxxx { + + + private String id; + private String classId; + private String name; + @NavigateFlat(mappingPath = {"schoolClass","name"}) + private String schoolClassName; + // private Integer age; + @Navigate(value = RelationTypeEnum.ManyToOne) + private SchoolClass schoolClass; + @Navigate(value = RelationTypeEnum.OneToOne) + private InternalSchoolStudentAddress schoolStudentAddress; + + + /** + * {@link com.easy.query.test.entity.school.SchoolClass } + */ + @Data + public static class InternalSchoolClass { + private String id; + private String name; + + + } + + + /** + * {@link com.easy.query.test.entity.school.SchoolStudentAddress } + */ + @Data + public static class InternalSchoolStudentAddress { + private String id; + private String studentId; + private String address; + + + } + +} diff --git a/sql-test/src/main/java/com/easy/query/test/entity/school/dto/SchoolClassDTO123.java b/sql-test/src/main/java/com/easy/query/test/entity/school/dto/SchoolClassDTO123.java new file mode 100644 index 000000000..b89c2f683 --- /dev/null +++ b/sql-test/src/main/java/com/easy/query/test/entity/school/dto/SchoolClassDTO123.java @@ -0,0 +1,43 @@ +package com.easy.query.test.entity.school.dto; + + +import com.easy.query.core.annotation.Navigate; +import com.easy.query.core.enums.RelationTypeEnum; +import lombok.Data; + +import java.util.List; + +/** + * this file automatically generated by easy-query struct dto mapping + * 当前文件是easy-query自动生成的 结构化dto 映射 + * {@link com.easy.query.test.entity.school.SchoolClass } + * + * @author easy-query + */ +@Data +public class SchoolClassDTO123 { + + + private String id; + private String name; + //中间表多对多配置,其中mappingClass表示中间表,selfMappingProperty表示中间表的哪个字段和当前表对应, + //targetMappingProperty表示中间表的哪个字段和目标表的属性对应 + @Navigate(value = RelationTypeEnum.ManyToMany) + //完整配置其中自己的属性和目标属性忽略表示主键 +// @Navigate(value = RelationTypeEnum.ManyToMany) + + private List schoolTeachers; + + + /** + * {@link com.easy.query.test.entity.school.SchoolTeacher } + */ + @Data + public static class InternalSchoolTeachers { + private String id; + private String name; + + + } + +}