java.lang.IllegalStateException: No typehandler found for mapping XXX
前言:今天遇到了这个问题,刚开始觉得很容易解决的,毕竟能定位到出问题的文件和对应的字段,根据以往的经验也可以判断出是字段映射类型不匹配的问题,后来找了半天还是没找到问题的根源,从网上百度,也没看到令人满意的分析以及和我情况类似的描述。于是,下定决心,先深呼吸,然后冷静下来好好玩一下。
如下是我的分析过程,这里以提供分析的思路为主,希望以后在遇到类似的问题能一下子定位到,解决掉。
1:异常信息的一部分,如下所示,和以往一样,先仔细瞧瞧,根据异常的提示基本能定位到问题出在那个文件,那个字段或者某个小氛围,如下所示
Caused by: org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [D:\workspace\XXX\target\ape-web-0.0.1-SNAPSHOT\WEB-INF\classes\mappers\SortCenterRouteMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: java.lang.IllegalStateException: No typehandler found for mapping movementName
at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:466)
at org.mybatis.spring.SqlSessionFactoryBean.afterPropertiesSet(SqlSessionFactoryBean.java:340)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1479)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1419)
... 80 more
Caused by: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: java.lang.IllegalStateException: No typehandler found for mapping movementName
at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:117)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.parse(XMLMapperBuilder.java:89)
at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:464)
... 83 more
Caused by: java.lang.IllegalStateException: No typehandler found for mapping movementName
at org.apache.ibatis.mapping.ResultMapping$Builder.validate(ResultMapping.java:147)
at org.apache.ibatis.mapping.ResultMapping$Builder.build(ResultMapping.java:136)
at org.apache.ibatis.builder.MapperBuilderAssistant.assembleResultMapping(MapperBuilderAssistant.java:426)
at org.apache.ibatis.builder.MapperBuilderAssistant.buildResultMapping(MapperBuilderAssistant.java:222)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.buildResultMappingFromContext(XMLMapperBuilder.java:371)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:276)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:248)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElements(XMLMapperBuilder.java:240)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:113)
... 85 more
2:下面是我的分析过程
2-1:定位到出问题的文件,字段,然后对照,映射的情况,映射对象的情况,数据库表字段的情况,如下所示:



2-2:原本以为经过上面的分析一定能定位到问题的,结果让我大惑不解,没问题呀!仔仔细细看了几遍没发现有问题
2-3:后来就按照我原来分析问题的思路,再重新分析一遍(有时候我们认为不可能出现问题的地方,可能是,一旦出现问题就容易令我们崩溃的地方),下面是我重新分析的思路,根据报错的提示信息——“No typehandler found for mapping”以及异常发生的嵌套位置,试着去定位到对应的源码,然后通过调试模式看看到底是什么引起了程序抛错,比较幸运,我一下子就定位到了的可能出现问题的源码之处了,如下所示:

2-4:启动服务器,进入调试模式,跟踪源码报错的部分,分析当时的运行情况,我们看到了程序为什么抛出异常,以及可能存在问题的地方,到这里基本就定位到问题的根源了,放慢速度,让灵魂跟上脚步。让我奇怪的是我的字段明明是String类型的为什么和自己认为不一样哪?再回头看看那个String类型的真面目吧!

2-5:我去,还真不是自己认为的java.lang.String类型的?问题是定位到了,怎么解决就不说了!但是为什么是这个类型呢?是谁修改的?还是自己一不小心导致的?编程是个细致的活,所以还是要胆大心细一些吧!

3:参考
http://stackoverflow.com/questions/19273783/no-typehandler-exception-in-mybatis
java.lang.IllegalStateException: No typehandler found for mapping XXX的更多相关文章
- Caused by: java.lang.IllegalStateException: Ambiguous mapping found
Caused by: java.lang.IllegalStateException: Ambiguous mapping found. Cannot map ‘myCockpitMgrControl ...
- java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'waterQuality
如果一个项目中有两个@RequestMapping("/xxx")完全相同就会报 java.lang.IllegalStateException 改进办法:修改@RequestM ...
- Tomcat部署项目时出错java.lang.IllegalStateException: ContainerBase.addChild: start:org.apache.catalina.Life
Tomcat部署项目时出错java.lang.IllegalStateException: ContainerBase.addChild: start:org.apache.catalina.Life ...
- myeclipse 无法启动 java.lang.IllegalStateException: Unable to acquire application service. Ensure that the org.eclipse.core.runtime bundle is resolved and started (see config.ini).
把myeclipse10 按照目录完整拷贝到了另外一台电脑, 另外的目录 原安装目录 D\:\soft\i\myeclipse10 新安装目录 E\:\soft\myeclipse10 双击启动失败, ...
- java.lang.IllegalStateException:Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xxx...}: java.lang.IllegalSta ...
- java.lang.IllegalStateException: Not allowed to create transaction on shared EntityManager - use Spring transactions or EJB CMT instead
java.lang.IllegalStateException: Not allowed to create transaction on sharedEntityManager - use Spri ...
- java.lang.IllegalStateException: getOutputStream() has already been called for this response
ERROR [Engine] StandardWrapperValve[jsp]: Servlet.service() for servlet jsp threw exceptionjava.lang ...
- 用java实现文件下载,提示java.lang.IllegalStateException: getOutputStream() has already been called for this response
1. 用java实现文件下载,提示java.lang.IllegalStateException: getOutputStream() has already been called for this ...
- eclipse启动报错java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' befo
报错: java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' before invo ...
随机推荐
- Get file extention in XSLT
When working with data view web parts or data form web parts in SharePoint, you might want to use ...
- mac切换root
方法一: sudo -i sudo su或是su. 转自:http://blog.csdn.net/duanyipeng/article/details/8621967
- iOS开发技巧 - Size Class与iOS 8多屏幕适配(一)
0. 背景: 在iOS开发中,Auto Layout(自动布局)能解决大部分的屏幕适配问题. 但是当iPhone 6和iPhone 6 Plus发布以后, Auto Layout已经不能解决复杂的屏幕 ...
- jQuery 操作 radio、select、checkbox
<script type="text/javascript"> $(function () { 一.radio 1.获取选中值,三种方法都可以: $('input:ra ...
- C++ 第一课:预处理命令
#,## # 和 ## 操作符是和#define宏使用的. 使用# 使在#后的首个参数返回为一个带引号的字符串. 例如, 命令 #define to_string( s ) # s 将会使编译器把以下 ...
- px 和 em 的区别
相同点:px和em都是长度单位: 异同点:px的值是固定的,指定是多少就是多少,计算比较容易.em得值不是固定的,并且em会继承父级元素的字体大小.浏览器的默认字体高都是16px.所以未经调整的浏览器 ...
- DWR组件——基于远程过程调用实现Ajax
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6686115.html 一:DWR的用途 DWR(Direct Web Remoting)是一个Web远程调用 ...
- C/C++与Java的区别
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5827273.html C/C++: C/C++代码——编译(不同的系统编译出不 ...
- Oracle Data Integrator 12c----包(Package)
1 创建"包" Designer->项目->ODI_Exercise ->第一个文件夹->包,右键"新建程序包": "定义&q ...
- 【shell】shell基础脚本合集
1.向脚本传递参数 #!/bin/bash #功能:打印文件名与输入参数 #作者:OLIVER echo $0 #打印文件名 echo $1 #打印输入参数 执行结果: 2.在脚本中使用参数 #!/b ...