当前使用版本(必须填写清楚,否则不予处理)
3.0.3
该问题是怎么引起的?(请使用最新版(具体版本查看CHANGELOG.md),如还有该问题再提 issue!)
使用通用枚举
数据采用同service的save方法保存, 且保存后结果正常
重现步骤
- 实体
public class UserAuth implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "auth_id", type = IdType.AUTO)
private Integer authId;
/**
* 用户ID
*/
private Integer userId;
/**
* 认证类型
*/
private UserAuthType type;
/**
* 身份标识
*/
private String identify;
/**
* token
*/
private String token;
/**
* 创建时间
*/
private LocalDateTime createdTime;
/**
* 更新时间
*/
private LocalDateTime updatedTime;
}
- 枚举类
public enum UserAuthType implements IEnum<String> {
PASSWORD("password"), GITHUB("github");
private String value;
UserAuthType(String value) {
this.value = value;
}
@Override
public String getValue() {
return this.value;
}
}
- 配置文件
mybatis-plus:
mapper-locations: classpath:/mapper/*Mapper.xml
typeAliasesPackage: cn.xxx.blog.model.entity
typeEnumsPackage: cn.xxx.blog.model.entity.constant
- 调用方法
QueryWrapper<UserAuth> authQueryWrapper = new QueryWrapper<UserAuth>()
.eq("user_id", user.getUserId())
.eq("type", UserAuthType.PASSWORD);
UserAuth userAuth = userAuthService.getOne(authQueryWrapper);
报错信息
Caused by: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.result.ResultMapException: Error attempting to get column 'type' from result set. Cause: java.lang.IllegalArgumentException: No enum constant cn.xxx.blog.model.entity.constant.UserAuthType.password
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:77)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446)
at com.sun.proxy.$Proxy93.selectList(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:230)
at com.baomidou.mybatisplus.core.override.PageMapperMethod.executeForMany(PageMapperMethod.java:173)
at com.baomidou.mybatisplus.core.override.PageMapperMethod.execute(PageMapperMethod.java:86)
at com.baomidou.mybatisplus.core.override.PageMapperProxy.invoke(PageMapperProxy.java:64)
at com.sun.proxy.$Proxy96.selectList(Unknown Source)
at com.baomidou.mybatisplus.extension.service.impl.ServiceImpl.getOne(ServiceImpl.java:287)
at com.baomidou.mybatisplus.extension.service.IService.getOne(IService.java:205)
at com.baomidou.mybatisplus.extension.service.IService$$FastClassBySpringCGLIB$$f8525d18.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:684)
at cn.xxx.blog.service.impl.UserAuthServiceImpl$$EnhancerBySpringCGLIB$$c1d559b6.getOne(<generated>)
at cn.xxx.blog.common.security.CustomUserDetailsService.loadUserByUsername(CustomUserDetailsService.java:44)
at org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:104)
... 54 more
Caused by: org.apache.ibatis.executor.result.ResultMapException: Error attempting to get column 'type' from result set. Cause: java.lang.IllegalArgumentException: No enum constant cn.xxx.blog.model.entity.constant.UserAuthType.password
at org.apache.ibatis.type.BaseTypeHandler.getResult(BaseTypeHandler.java:68)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.applyAutomaticMappings(DefaultResultSetHandler.java:520)
at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getRowValue(DefaultResultSetHandler.java:401)
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 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.apache.ibatis.plugin.Invocation.proceed(Invocation.java:49)
at com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor.intercept(PerformanceInterceptor.java:174)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)
at com.sun.proxy.$Proxy123.query(Unknown Source)
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 org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:83)
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)
... 68 more
Caused by: java.lang.IllegalArgumentException: No enum constant cn.xxx.blog.model.entity.constant.UserAuthType.password
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)
Comment From: banto6
切换到3.0-RC3可以正常使用
Comment From: miemieYaho
你把 string 换成 integer 试试,数据库也改成 integer
Comment From: qmdx
typeEnumsPackage: cn.xxx.blog.model.entity.constant 枚举类是在这里?
Comment From: banto6
@miemieYaho 尝试改成integer也不行 @qmdx 是的,版本降到3.0-RC3是可以正常工作的
Comment From: miemieYaho
方便的话在 github 上传一个能复现bug的项目,我这里一直正常使用没遇到你说的问题
Comment From: banto6
@miemieYaho git项目地址: https://github.com/buyi998/bug.git
Comment From: miemieYaho
你的项目有几个问题: 1. 去除 spring-boot-devtools ,该插件会导致很多问题,估计应该是主要原因 2. 去除 mybatis-spring-boot-starter ,mp 不需要这个 你先进行一些尝试
Comment From: banto6
@miemieYaho 非常感谢, 问题就是出在spring-boot-devtools身上, 移除后恢复正常。
Comment From: sunny0130
我遇到了同样的问题,项目里确实也有spring-boot-devtools,但遗憾的是我注释了该依赖后重新编译、启动后还是报错。
Comment From: manonglushang
我报错的原因是因为 步骤2: 配置扫描通用枚举 从 3.5.2 开始无需配置 ,重新配上就好了