異常一 java.lang.IllegalArgumentException: No enum constant
錯誤信息 (mybatis版本為3.4.6)
Caused by: org.apache.ibatis.executor.result.ResultMapException: Error attempting to get column 'statu' from result set. Cause: java.lang.IllegalArgumentException: No enum constant com.smartfsc.dal.domain.company.po.enums.EMechanismType.NORMAL
at org.apache.ibatis.type.BaseTypeHandler.getResult(BaseTypeHandler.java:68)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getPropertyMappingValue(DefaultResultSetHandler.java:471)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.applyPropertyMappings(DefaultResultSetHandler.java:440)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getRowValue(DefaultResultSetHandler.java:403)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForSimpleResultMap(DefaultResultSetHandler.java:355)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValues(DefaultResultSetHandler.java:330)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSet(DefaultResultSetHandler.java:303)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:196)
at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64)
at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:326)
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
at com.github.pagehelper.PageInterceptor.intercept(PageInterceptor.java:143)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)
at com.sun.proxy.$Proxy116.query(Unknown Source)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433)
... 38 more
Caused by: java.lang.IllegalArgumentException: No enum constant com.smartfsc.dal.domain.company.po.enums.EMechanismType.NORMAL
at java.lang.Enum.valueOf(Enum.java:238)
at org.apache.ibatis.type.EnumTypeHandler.getNullableResult(EnumTypeHandler.java:49)
at org.apache.ibatis.type.EnumTypeHandler.getNullableResult(EnumTypeHandler.java:26)
at org.apache.ibatis.type.BaseTypeHandler.getResult(BaseTypeHandler.java:66)
... 61 more
Mapper文件的配置
<result column="statu" property="status" typeHandler="org.apache.ibatis.type.EnumTypeHandler"/>
可能導致的原因
由于mybatis框架的異常信息不太友好缕探,比較難以定位問題狗唉。枚舉 A的實例映射到枚舉B狠鸳,轉換不了沃呢。導致這個異常的原因可能是Mapper的配置文件有誤呵俏∥巧蹋可能是與枚舉A相關的Mapper配置文件有誤,也可能是和枚舉B有關的Mapper配置文件有誤趣效。開發(fā)中遇見了幾次這個問題瘦癌,記錄一下。
解決方法
找出錯誤解決錯誤跷敬。不過也可以這樣試試讯私。
將typeHandler="org.apache.ibatis.type.EnumTypeHandler" 替換為 jdbcType="VARCHAR" 試試。即
<result column="statu" property="status" jdbcType="VARCHAR"/>