mybatis-plus EnumTypeHandler映射到错误的枚举类型

解决方法

删除resultMap中手动指定的typeHandler

不可行

<result column="type" property="type"  typeHandler="org.apache.ibatis.type.EnumTypeHandler"/>

可行

<result column="type" property="type" />

背景

mybatis-plus版本:3.4.3
spring-cloud版本:Hoxton.SR8

业务背景

前端需要很多下拉列表,这些下拉列表的值都是后端接口返回的;数据格式为:

{
  "EMPLOYEE": [
    {
      "label": "张三",
      "value": "code1"
    },
    {
      "label": "李四",
      "value": "code2"
    }
  ],
  "GROUP_CHAT": [
    {
      "label": "群聊1",
      "value": "group1"
    }
  ]
}

其中EMPLOYEE,GROUP_CHAT都是后端定义的枚举

public enum SimpleEnum{
	EMPLOYEE,
	GROUP_CHAT
}

数据库ResultMap对应的对象

public class SelectBO{
	private SimpleEnum type;
	private String label;
	private String value;

	// ..get set method..
}

数据库ResultMap

<resultMap id="selectListResult" type="SelectBO">
        <result column="type" property="type"  typeHandler="org.apache.ibatis.type.EnumTypeHandler"/>
        <result column="id" property="value"/>
        <result column="name" property="label"/>
    </resultMap>

出现的问题

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.result.ResultMapException: 
Error attempting to get column 'select_type' from result set.  Cause: java.lang.IllegalArgumentException: No enum constant xxxs.MaterialTypeEnum.EMPLOYEE

这个错误只在线上出现(偶尔),本地启项目出现不了这个问题QWQ。

出现这个问题的根本原因在于,在项目启动阶段mybatis在初始化的过程中将枚举映射错了,我也是在把服务器代码弄下来,远程调试本地代码发现的

后来我将服务器代码里面的相应ResultMap对应xml的typeHandler去掉再启动项目就能解决问题

不可行

<result column="type" property="type"  typeHandler="org.apache.ibatis.type.EnumTypeHandler"/>

可行

<result column="type" property="type" />
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值