Result Maps collection already contains value for问题

2023-05-16

目录

项目场景:

问题描述:

原因分析:

解决方案:

步骤:

特殊情况:


项目场景:

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博客

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Result Maps collection already contains value for问题 的相关文章

  • iOS 自定义地图、地理位置、地图绘制等

    下一张图片取自 www Trimaps com 我希望这里允许使用图片 如果不允许 请告诉我 我会立即删除 这些图像完美地解释了我想要实现的目标 我拥有所需的所有数据 所需区域 4 个角的纬度 经度 以十进制值表示 来自 Google 地图
  • .Net Windows 应用程序 WebBrowser / Google 地图 API v3

    我正在开发一个应用程序 用户可以在其中输入所需的地址 然后按按钮 该地址可以在WebBrowser net windows 应用程序中的控制 我知道你可以运行 javascriptWebBrowser通过使用WebBrowser1 Docu
  • CakePHP 2.1 使用包含条件进行查找

    我有以下型号 行业 ID 名称 Movie id name Industry id 行业有很多电影 Trailer id name movie id 电影有很多预告片 我需要为每个找到 6 个最新预告片Industry 每部电影不需要有预告
  • 页内搜索使用 contains() 显示/隐藏 div 内容

    我正在尝试向我的常见问题解答页面添加搜索功能 但我完全陷入困境 我想要的是一个文本框 用户在其中输入关键字 或单词 该文本框为关键字运行 jquery 并为所有相关答案设置 display block 到目前为止我所拥有的是这样的
  • Google API 为 Android 抛出 no-crunch 错误

    我刚刚在 eclipse 中安装了 android 2 1 SDK 并创建了一个针对 Google API 7 的项目 Eclipse 在项目图标上显示错误 并且调试窗口显示此错误 ERROR Unknown command crunch
  • 单击(右键单击)时使用传单地图库获取图像叠加层的像素坐标

    我正在尝试使用传单地图库获取单击 右键单击 上下文菜单 时图像叠加的像素坐标 本质上 当用户单击图像时 我需要找到用户单击图像的位置的 x y 或宽度 高度 目前这就是我所拥有的 Using leaflet js to pan and zo
  • 如果类列表包含多个特定类

    我需要一个函数来触发元素recordplayerstick包含pinplace or pinsongplay班级 我当前的代码返回语法错误 这样做的正确方法是什么 if document getElementById recordplaye
  • 包含不区分大小写的方法而无需进行重大代码更改?

    有没有办法忽略 contains 方法的大小写 但同时使代码片段或多或少相同 This method returns a list of all words from the dictionary that include the give
  • 包含声明

    我不明白的重要性CONTAINSFortran 90 中的声明 例如 PROGRAM BLABLA IMPLICIT NONE INTEGER i j k i 1 j 1 k 1 PRINT i j k CALL ABC i j k PRI
  • ggplot 中的等值线图,其中包含有孔的多边形

    我正在尝试绘制德国的分区统计图 显示各州的贫困率 灵感来自这个问题 https stackoverflow com questions 21651985 shapefile to produce a linked micromap in r
  • Android 显式 Intent 抛出 NoClassDefFounderror

    我正在尝试使用明确的意图在我的 Android 应用程序中显示 MapView 尽管我没有发现我的代码有任何问题 但当我尝试启动我的活动时 我不断收到 NoClassDefFoundError 基本上 从我的主要活动 SetCriteria
  • Qt/Qml:如何包含地图图块以供离线使用?

    我需要将离线图块 滑动地图 包含到主要在 Android 和 iOS 上运行的 Qt Qml 移动应用程序中 我发现的唯一有据可查且有效的解决方案是商业 Esri Arcgis Runtime for Qt 但是 创建切片包需要使用 Arc
  • 如何检查 List 元素是否包含具有特定属性值的项目

    public class PricePublicModel public PricePublicModel public int PriceGroupID get set public double Size get set public
  • Google Maps API:同一张地图上的多个方向/路线

    我在同一个 Google 地图上显示多条路线时遇到问题 我有一个从我的控制器获得的位置列表 以这种形式 7 0 arriveeLat 48 784 arriveeLng 2 40735 departLat 48 9016 departLng
  • java 的地理图表

    谁能推荐一个 Java 组件 它可以让您创建一个漂亮的世界地图图像 突出显示某些国家 基于一些统计数据 与此图像类似的东西 类似于 Google 地理图表 但适用于 Java https developers google com char
  • 如何减少地理地图的地块与边界之间的空间?

    我正在尝试使用 marmap 库绘制美国东北部的测深地图 以下代码加载了正确的范围 但是当我绘制地图时 边界和地图之间有空白区域 无论是在地图的顶部 底部还是左侧 右侧 导出绘图时也会出现这种情况 如果我拖动绘图查看器屏幕大小 绘图会进行调
  • 读取、表示和渲染地图数据的最佳方式是什么?

    我有兴趣编写一个简单的导航应用程序作为我的宠物项目 在搜索了免费地图数据后 我决定了美国人口普查局 TIGER http www census gov geo www tiger tgrshp2007 tgrshp2007 html2007
  • 修复地图投影后形状不连续的多边形对象

    该演示程序 旨在在 IPython 笔记本中运行 您需要matplotlib mpl toolkits basemap pyproj and shapely 应该在地球表面绘制越来越大的圆圈 只要圆不越过其中一根极点 它就能正常工作 如果发
  • 如何在 R 中按下传单弹出窗口时创建事件?

    当我单击传单多边形时 我想让 tabPanel 变为闪亮 我对如何做到这一点有一些想法 但我找不到实现它们所需的信息 我在选项卡面板中有传单 但我想在单击多边形时切换到另一个选项卡 leaflet llmap gt addTiles gt
  • R 中的县等值区域地图的阿拉斯加和夏威夷格式不正确

    我正在尝试将美国的 Choropleth 地图格式化为特定颜色 不幸的是 当使用scale fill brewer改变颜色 只有 48 个州这样做 夏威夷和阿拉斯加没有 是否可以知道我是否也可以将着色应用到夏威夷和阿拉斯加 library

随机推荐