diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/AbstractRelation.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/AbstractRelation.java index 0d5938a4..5988d572 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/AbstractRelation.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/AbstractRelation.java @@ -215,6 +215,7 @@ abstract class AbstractRelation { * @param selfEntities 当前的实体类列表 * @param targetObjectList 查询到的结果 * @param mapper 查询的 Mapper + * @param queriedClasses */ - public abstract void join(List selfEntities, List targetObjectList, BaseMapper mapper); + public abstract void join(List selfEntities, List targetObjectList, BaseMapper mapper, Set> queriedClasses); } diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/ManyToMany.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/ManyToMany.java index acda7d36..75067687 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/ManyToMany.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/ManyToMany.java @@ -77,7 +77,7 @@ class ManyToMany extends AbstractRelation { @Override - public void join(List selfEntities, List mappingObjectList, BaseMapper mapper) { + public void join(List selfEntities, List mappingObjectList, BaseMapper mapper, Set> queriedClasses) { List mappingRows = (List) mappingObjectList; Set targetValues = new LinkedHashSet<>(); for (Row row : mappingRows) { @@ -106,6 +106,8 @@ class ManyToMany extends AbstractRelation { List targetObjectList = mapper.selectListByQueryAs(queryWrapper, relationFieldWrapper.getMappingType()); + RelationManager.doQueryRelations(mapper, targetObjectList, queriedClasses); + if (CollectionUtil.isNotEmpty(targetObjectList)) { selfEntities.forEach(selfEntity -> { Object selfValue = selfFieldWrapper.get(selfEntity); diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/OneToMany.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/OneToMany.java index 9103358a..800c26e8 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/OneToMany.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/OneToMany.java @@ -71,7 +71,7 @@ class OneToMany extends AbstractRelation { @Override - public void join(List selfEntities, List targetObjectList, BaseMapper mapper) { + public void join(List selfEntities, List targetObjectList, BaseMapper mapper, Set> queriedClasses) { selfEntities.forEach(selfEntity -> { Object selfValue = selfFieldWrapper.get(selfEntity); if (selfValue != null) { diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/RelationManager.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/RelationManager.java index 4c1a2f29..4b72535b 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/RelationManager.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/RelationManager.java @@ -22,6 +22,7 @@ import com.mybatisflex.annotation.RelationOneToOne; import com.mybatisflex.core.BaseMapper; import com.mybatisflex.core.datasource.DataSourceKey; import com.mybatisflex.core.query.QueryWrapper; +import com.mybatisflex.core.row.Row; import com.mybatisflex.core.util.ClassUtil; import com.mybatisflex.core.util.CollectionUtil; import com.mybatisflex.core.util.StringUtil; @@ -79,15 +80,15 @@ public class RelationManager { @SuppressWarnings({"rawtypes", "unchecked"}) - private static void doQueryRelations(BaseMapper mapper, List entities, Set> queriedClass) { + static void doQueryRelations(BaseMapper mapper, List entities, Set> queriedClasses) { if (CollectionUtil.isEmpty(entities)) { return; } Class objectClass = (Class) entities.get(0).getClass(); - if (queriedClass.contains(objectClass)) { + if (queriedClasses.contains(objectClass)) { return; } else { - queriedClass.add(objectClass); + queriedClasses.add(objectClass); } List relations = getRelations(objectClass); if (relations.isEmpty()) { @@ -111,10 +112,12 @@ public class RelationManager { } List targetObjectList = mapper.selectListByQueryAs(queryWrapper, mappingType); - doQueryRelations(mapper, targetObjectList, queriedClass); + if (mappingType != Row.class) { + doQueryRelations(mapper, targetObjectList, queriedClasses); + } if (CollectionUtil.isNotEmpty(targetObjectList)) { - relation.join(entities, targetObjectList, mapper); + relation.join(entities, targetObjectList, mapper, queriedClasses); } } finally { if (StringUtil.isNotBlank(dataSource)) { diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/ToOneRelation.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/ToOneRelation.java index aba1042c..c356b30e 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/ToOneRelation.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/relation/ToOneRelation.java @@ -51,7 +51,7 @@ class ToOneRelation extends AbstractRelation { @Override - public void join(List selfEntities, List targetObjectList, BaseMapper mapper) { + public void join(List selfEntities, List targetObjectList, BaseMapper mapper, Set> queriedClasses) { selfEntities.forEach(selfEntity -> { Object selfValue = selfFieldWrapper.get(selfEntity); if (selfValue != null) {