Result Maps collection already contains value for问题
目录
项目场景:
问题描述:
原因分析:
解决方案:
步骤:
特殊情况:
项目场景:
Spring Boot+Mybatis项目
问题描述:
使用IDEA启动的时候报错了,异常信息:
Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [D:...\target\classes\biz-sql\oracle\mapper\PubParamWorkListOraMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for com.xxx.mapper.xxx.PubParamWorkListMapper.BaseResultMap
Caused by: java.lang.IllegalArgumentException: Result Maps collection already contains value for com.xxx.mapper.workflow.PubParamWorkListMapper.BaseResultMap
at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:872)
at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:844)
at org.apache.ibatis.session.Configuration.addResultMap(Configuration.java:626)
at org.apache.ibatis.builder.MapperBuilderAssistant.addResultMap(MapperBuilderAssistant.java:214)
at org.apache.ibatis.builder.ResultMapResolver.resolve(ResultMapResolver.java:47)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:285)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:252)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElements(XMLMapperBuilder.java:244)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:116)
... 58 common frames omitted
原因分析:
异常信息提示了在Mybatis的所有配置文件里,存在着同样名称空间的重复id设置,其中一个配置是PubParamWorkListOraMapper.xml里的BaseResultMap。
关于这个错误,已经有很多文章分析了原因,比如:
1、当同一个xml映射文件内存在两个相同的id(即两个sql语句的id相同)时会报此错
解决:查询sql语句的id值修改
2、在mybatis的配置文件mybatis.xml内使用了<mapper/>标签加载xxxMapper.xml的映射文件报错,因为如果xxxMapper.xml与namespace的接口在同一路径下,就不需要在mybaits.xml中再进行配置了。
解决:将mybatis文件中<mapper/>标签中的内容删除
3、parameterType中的问题。这里的类名如果找不到也会报这个错,比如你之前是将该类名写死在这里,之后由于重构将该类转移到其他包中,如果这里不修改也会报这个错
解决:检查。。
4、还是parameterType中的问题,这次是关于自定义类的,当你使用基本类型的时候,比如int、string等,千万不要写错,比如写成strnig,咋一看看不出来,结果该问题就很难找
解决:检查。。
5、resultType的值与resultMap的id值相同的话会报错,可能是冲突了
解决:修改resultMap的id属性,因为resultType的值即为bean类别名或者全路径名
6、这一点和上一点差不多,如果是自定义resultMap,如果返回类型写成resultType,也会报这个错(今天就栽在这。)
解决:将返回类型改为resultMap,且不要出现第5点的问题
7. 配置的时候generatorConfig.xml(我的逆向工程配置文件名),里面的schema没有指定,如果没有指定的话,本地存在多个相同名字的表的话,逆向工程会自己去找名字叫t_user的这张表,也就可能导致生成了错误的bean。然后就会产生上面的问题。一定不要忘了指定。 我本地有三张叫t_user的表,忘了指定schema,就生成了错误的bean。
<table schema="ssmteam" tableName="t_user" domainObjectName="User"> </table>
解决方案:
步骤:
1.打开异常信息里提示出现异常的文件PubParamWorkListOraMapper.xml,查看文件里是否有重复的id:BaseResultMap
2.全局查找PubParamWorkListOraMapper.xml里的名称空间,看是否在其它配置文件里也配置了同样的名称空间
3.全局查找PubParamWorkListOraMapper.xml文件,看是否有多个工程的配置文件里都配置了这个文件
4.按照解决步骤上方的原因分析逐项排查
5.在文件系统里搜索PubParamWorkListOraMapper.xml文件,看该工程及其子工程的编译路径如target里有是否有多个这个文件,导致系统启动的时候,多次加载了这个文件。
(如果是windows系统,可以用everything来快速搜索文件)
大部分情况下,1到4步骤,就可以解决问题了。
特殊情况:
本次的场景比较特殊,在第5步才解决:
原本PubParamWorkListOraMapper.xml这个文件在A工程里,同事将PubParamWorkListOraMapper.xml文件移动到了B工程里。我更新了代码之后,使用IDEA启动就报了文章开头的错误。原因是更新完代码之后,IDEA没有自动重新编译A工程,A工程的target目录下还保留着原来的PubParamWorkListOraMapper.xml文件,而B工程的target里也有这个文件,启动的时候就报了Result Maps collection already contains value for的错。
参考:
关于mybatis启动报Result Maps collection already contains value for ...的问题总结_Evan's Blog ٩(๑❛ᴗ❛๑)۶-CSDN博客
Result Maps collection already contains value for问题相关推荐
- Result Maps collection already contains value for
启动的时候报错,junit报错一样的 Result Maps collection already contains value for mybatis 查了一下应该是 ***mapper.java ...
- mybatis报错解决办法 :Result Maps collection does not contain value for java.lang.String
错误 java.lang.IllegalArgumentException: Result Maps collection does not contain value for java.lang.S ...
- Spring集成Mybatis错误Result Maps collection already contains value for XXX
Spring在集成Mybatis出现如下错误: SpringResult Maps collection already contains value for com.guowei.maven.fra ...
- mybatisGenerator 代码自动生成报错 Result Maps collection already contains value for BaseResultMap...
由于mybatis简单易学,比起Hibername来,更容易上手,代码也能自动生成.这几天研究了下代码自动生成的,参考: http://0609xiaohua.iteye.com/blog/14535 ...
- mybatis报错(三)报错Result Maps collection does not contain value for java.lang.Integer解决方法...
转自:https://blog.csdn.net/zengdeqing2012/article/details/50978682 1 [WARN ] 2016-03-25 13:03:23,955 - ...
- java.lang.IllegalArgumentException: Result Maps collection already contains value for ciis.zht.model
Mybatis报错:java.lang.IllegalArgumentException: Result Maps collection already contains value for ciis ...
- Result Maps collection already contains value for com.anoxia.mapper.XXXMapper.BaseResultMap
关于Mybatis-Generator自动生成出现Result Maps collection already contains value for com.anoxia.mapper.xxxMapp ...
- Mybatis错误 Result Maps collection already contains value for xxx
使用mybatis 启动项目失败 错误信息: org.springframework.beans.factory.BeanCreationException: Error creating bean ...
- mybatis报错:Result Maps collection already contains value for model.dao.UserMapper.BaseResultMap
数据库:8.0.11 数据库驱动包为:mysql-connector-java-8.0.11.jar 使用Mybatis-Generator自动生成Dao.Model.Mapping相关文件后,把文件 ...
- mybatis启动报错Result Maps collection already contains value for xxx
背景: mybatis配置xml启动的时候报错,提示Result Maps collection already contains value for xxx. 原因分析: 同一个xml文件里写的sq ...
最新文章
- html向js传递id
- javascript功能_功能性JavaScript简介
- 用了10多年的 Tomcat 居然有bug,这能忍?
- 卡尔曼滤波器中的Q,R
- 高性能ASP.NET系统架构设计
- Kruskal算法的C语言程序
- 项目中使用completablefuture_“工业冷冻用中大型冷盐水机组使用R290替代R22项目”通过验收...
- AutoMapper多个对象映射到一个Dto对象
- openfire服务器
- Angular程序架构
- 解说linux下proc文件系统
- SHELL(bash)脚本编程四:其他扩展
- Centos7上使用Kind搭建Kubernetes环境
- WARNING: The converted filename is an ASM fully qualified filename.
- Android下使用W25Q32
- 蓝桥杯 大臣的旅费 JAVA
- 怎么在html的表格中加筛选,excel中表头合并单元格的筛选
- 小米oj和为零的三元组
- VBS 文本歌词粤语拼音翻译
- 8、RH850 F1 IIC通讯功能和配置