美文网首页
mybatis异常集

mybatis异常集

作者: CtrlC_V | 来源:发表于2018-05-24 16:29 被阅读0次

    异常一 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配置文件有误。开发中遇见了几次这个问题,记录一下。

    解决方法

    找出错误解决错误。不过也可以这样试试。

     将typeHandler="org.apache.ibatis.type.EnumTypeHandler" 替换为 jdbcType="VARCHAR" 试试。即
     <result column="statu" property="status"  jdbcType="VARCHAR"/>
    

    相关文章

      网友评论

          本文标题:mybatis异常集

          本文链接:https://www.haomeiwen.com/subject/dxpsjftx.html