Spring升5同步MyBatis3.5.11遇嵌套懒加载属性重复问题求助
针对你遇到的ExecutorException,核心原因是MyBatis 3.5+版本强化了懒加载关联属性的唯一性校验,旧版本允许的隐性重复配置在新版本中触发了拦截。以下是具体排查和解决方向:
检查resultMap的继承关系:如果当前报错的resultMap使用了
extends属性继承其他映射,务必检查父级resultMap中是否已经定义过xyz这个关联属性。旧版本MyBatis不会校验继承链中的重复定义,新版本会严格拦截这种情况。梳理嵌套映射的属性链:排查当前resultMap中所有
association/collection的嵌套配置,确认是否存在多条关联路径最终指向同一个最左属性xyz。比如某嵌套resultMap中也定义了同名属性,或者多个关联的property路径前缀重叠,都会触发该报错。排查自动映射冲突:MyBatis的自动映射功能(默认开启)可能会自动将查询列映射到同名实体属性,和你手动配置的
association产生冲突。可以临时在全局配置中设置autoMappingBehavior=NONE测试,若报错消失,说明是自动映射导致的重复:configuration.setAutoMappingBehavior(AutoMappingBehavior.NONE);也可以仅在当前resultMap上关闭自动映射:
<resultMap id="xxxMap" type="xxx" autoMapping="false"> <!-- 手动配置所有映射 --> </resultMap>核对关联方法的返回类型:确认
com.xyz.ApplicationMybatisDao.getbyName方法的返回对象类型,是否和association中指定的javaType匹配。如果返回对象本身也包含xyz属性,可能会在映射链中形成重复的属性路径,需要调整返回类型或关联配置。升级到最新补丁版本:3.5.11可能存在特定场景的校验bug,尝试升级到3.5.x系列的最新稳定版(如3.5.15),看是否是已知问题已被官方修复。
内容的提问来源于stack exchange,提问作者Inked

