解决:Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for xxx
程序员文章站
2022-07-15 13:05:02
...
问题
mybatis启动时报以下错误信息
Caused by: java.lang.IllegalArgumentException: Result Maps collection already contains value for com.xxx.xxx.server.mapper.AuthApplicationMapper.BaseResultMap
at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:930)
at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:887)
at org.apache.ibatis.session.Configuration.addResultMap(Configuration.java:644)
at org.apache.ibatis.builder.MapperBuilderAssistant.addResultMap(MapperBuilderAssistant.java:208)
at org.apache.ibatis.builder.ResultMapResolver.resolve(ResultMapResolver.java:47)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:289)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:253)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElements(XMLMapperBuilder.java:245)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:118)
... 71 more
分析
从异常信息来看,意思 是Result Maps collection已经包含 AuthApplicationMapper.BaseResultMap了。就是在启动过程AuthApplicationMapper 存在两个 BaseResultMap
检查了xml代码AuthApplicationMapper.xml,发现只有一个BaseResultMap。按理说是不会报错呀
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxx.xxx.server.mapper.AuthApplicationMapper">
<resultMap id="BaseResultMap" type="com.xxx.smlds.model.AuthApplication">
<[email protected]>
<[email protected] auth_application-->
<id column="id" jdbcType="VARCHAR" property="id" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="code" jdbcType="VARCHAR" property="code" />
<result column="is_enable" jdbcType="NUMERIC" property="isEnable" />
<result column="creator" jdbcType="VARCHAR" property="creator" />
<result column="create_time" jdbcType="VARCHAR" property="createTime" />
<result column="modifier" jdbcType="VARCHAR" property="modifier" />
<result column="modify_time" jdbcType="VARCHAR" property="modifyTime" />
<result column="icon_default" jdbcType="LONGVARCHAR" property="iconDefault" />
<result column="icon_selected" jdbcType="LONGVARCHAR" property="iconSelected" />
</resultMap>
<sql id="Base_Column_List">
<[email protected]>
id, "name", code, is_enable, creator, create_time, modifier, modify_time, icon_default,
icon_selected
</sql>
</mapper>
此时想到,编译运行时肯定肯定两个 AuthApplicationMapper.xml 文件。
经过排查是启动模块依赖的某个模块,也把xml文件外置编译了。如xml文件放在模块A 里, B,C 都依赖A且把xml外置,B又依赖C, 此时B启动时就会报以上错误。
解决
1. B 不依赖C,
2. C不外置xml
名词解释:xml外置
前提: B依赖A
B的pom.xml
<!--B依赖A, 这里是B模块的pom.xml-->
<build>
<resource>
<!--细粒度控制-->
<directory>../A模块/src/main/resources</directory>
<includes>
<include>mapper/**Mapper.xml</include>
</includes>
</resource>
</build>
A/pom.xml
<!--这里是A 模块的pom.xml-->
<resources>
<!--由于顶层应用把mapper.xml外置了,这里不打包进去了,避免冲突。若单独运行则去掉-->
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>mapper/**Mapper.xml</exclude>
</excludes>
</resource>
</resources>
上一篇: Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for.....
下一篇: Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for……
推荐阅读
-
使用mybatis报错【Result Maps collection already contains value for ...BaseResultMap】的解决方法
-
java.lang.IllegalArgumentException: Result Maps collection already contains value for
-
Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for ...
-
mybatis****Caused by: java.lang.IllegalArgumentException: Result Maps collection already contains va
-
java.lang.IllegalArgumentException: Result Maps collection already contains value for
-
Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for.....
-
解决:Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for xxx
-
Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for……
-
java.lang.IllegalArgumentException: Result Maps collection already contains value for ...
-
异常:java.lang.IllegalArgumentException: Result Maps collection already contains ...