-
Notifications
You must be signed in to change notification settings - Fork 211
Closed
Description
Context
Mybatis 3.5.7
Mybatis Dynamic SQL 1.3.0
Mybatis Generator 1.4.0
Description
If use org.apache.ibatis.type.EnumOrdinalTypeHandler
, it will cause IllegalArgumentException when save data, but query (select) action is right.
would you help me solve this problem?thanks very much.
the follow is debug information, it shows that the parameterType is DefaultInsertStatementProvider
so, can't get property record.username
Generator configuration
public enum Gender {
MALE, FEMALE;
}
<!DOCTYPE generatorConfiguration PUBLIC
"-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<context id="dsql" targetRuntime="MyBatis3DynamicSql">
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/user" userId="root" password=""/>
<javaTypeResolver>
<property name="useJSR310Types" value="true"/>
</javaTypeResolver>
<javaModelGenerator targetPackage="com.example.dao.model" targetProject="src/main/java"/>
<javaClientGenerator targetPackage="com.example.dao.mapper" targetProject="src/main/java">
<property name="rootInterface" value="org.mybatis.dynamic.sql.util.mybatis3.CommonSelectMapper"/>
</javaClientGenerator>
<!-- override typehandler -->
<table tableName="user" domainObjectName="UserEntity">
<generatedKey column="id" sqlStatement="JDBC" identity="true" type="post"/>
<columnOverride column="gender"
javaType="com.example.core.domain.enums.Gender"
typeHandler="org.apache.ibatis.type.EnumOrdinalTypeHandler"/>
</table>
</context>
</generatorConfiguration>
class
- enum definition
public enum Gender {
MALE, FEMALE;
}
- generate mapper
@Mapper
public interface UserEntityMapper extends CommonSelectMapper {
@InsertProvider(type=SqlProviderAdapter.class, method="insert")
@Options(useGeneratedKeys=true,keyProperty="record.id")
int insert(InsertStatementProvider<UserEntity> insertStatement);
@SelectProvider(type=SqlProviderAdapter.class, method="select")
@Results(id="UserEntityResult", value = {
@Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true),
@Result(column="username", property="username", jdbcType=JdbcType.VARCHAR),
@Result(column="gender", property="gender", typeHandler=EnumOrdinalTypeHandler.class, jdbcType=JdbcType.TINYINT),
@Result(column="create_at", property="createAt", jdbcType=JdbcType.TIMESTAMP),
@Result(column="update_at", property="updateAt", jdbcType=JdbcType.TIMESTAMP)
})
List<UserEntity> selectMany(SelectStatementProvider selectStatement);
}
- generate sqlSupport
public final class UserEntityDynamicSqlSupport {
public static final UserEntity userEntity = new UserEntity();
// ignore...
public static final class UserEntity extends SqlTable {
// ignore...
public final SqlColumn<Gender> gender = column("gender", JDBCType.TINYINT, "org.apache.ibatis.type.EnumOrdinalTypeHandler");
// ignore...
public UserEntity() {
super("user");
}
}
}
Error Log
java.lang.IllegalArgumentException: Object does not represent an enum type.
at org.apache.ibatis.type.EnumOrdinalTypeHandler.<init>(EnumOrdinalTypeHandler.java:38) ~[mybatis-3.5.7.jar:3.5.7]
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na]
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500) ~[na:na]
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481) ~[na:na]
at org.apache.ibatis.type.TypeHandlerRegistry.getInstance(TypeHandlerRegistry.java:446) ~[mybatis-3.5.7.jar:3.5.7]
at org.apache.ibatis.builder.BaseBuilder.resolveTypeHandler(BaseBuilder.java:143) ~[mybatis-3.5.7.jar:3.5.7]
at org.apache.ibatis.builder.BaseBuilder.resolveTypeHandler(BaseBuilder.java:132) ~[mybatis-3.5.7.jar:3.5.7]
at org.apache.ibatis.builder.SqlSourceBuilder$ParameterMappingTokenHandler.buildParameterMapping(SqlSourceBuilder.java:141) ~[mybatis-3.5.7.jar:3.5.7]
at org.apache.ibatis.builder.SqlSourceBuilder$ParameterMappingTokenHandler.handleToken(SqlSourceBuilder.java:87) ~[mybatis-3.5.7.jar:3.5.7]
at org.apache.ibatis.parsing.GenericTokenParser.parse(GenericTokenParser.java:77) ~[mybatis-3.5.7.jar:3.5.7]
at org.apache.ibatis.builder.SqlSourceBuilder.parse(SqlSourceBuilder.java:50) ~[mybatis-3.5.7.jar:3.5.7]
at org.apache.ibatis.scripting.defaults.RawSqlSource.<init>(RawSqlSource.java:46) ~[mybatis-3.5.7.jar:3.5.7]
at org.apache.ibatis.scripting.xmltags.XMLLanguageDriver.createSqlSource(XMLLanguageDriver.java:60) ~[mybatis-3.5.7.jar:3.5.7]
at org.apache.ibatis.builder.annotation.ProviderSqlSource.createSqlSource(ProviderSqlSource.java:189) ~[mybatis-3.5.7.jar:3.5.7]
at org.apache.ibatis.builder.annotation.ProviderSqlSource.getBoundSql(ProviderSqlSource.java:156) ~[mybatis-3.5.7.jar:3.5.7]
at org.apache.ibatis.mapping.MappedStatement.getBoundSql(MappedStatement.java:305) ~[mybatis-3.5.7.jar:3.5.7]
at org.apache.ibatis.executor.statement.BaseStatementHandler.<init>(BaseStatementHandler.java:64) ~[mybatis-3.5.7.jar:3.5.7]
at org.apache.ibatis.executor.statement.PreparedStatementHandler.<init>(PreparedStatementHandler.java:41) ~[mybatis-3.5.7.jar:3.5.7]
at org.apache.ibatis.executor.statement.RoutingStatementHandler.<init>(RoutingStatementHandler.java:46) ~[mybatis-3.5.7.jar:3.5.7]
at org.apache.ibatis.session.Configuration.newStatementHandler(Configuration.java:658) ~[mybatis-3.5.7.jar:3.5.7]
at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:48) ~[mybatis-3.5.7.jar:3.5.7]
at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) ~[mybatis-3.5.7.jar:3.5.7]
at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) ~[mybatis-3.5.7.jar:3.5.7]
at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:194) ~[mybatis-3.5.7.jar:3.5.7]
at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:181) ~[mybatis-3.5.7.jar:3.5.7]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427) ~[mybatis-spring-2.0.6.jar:2.0.6]
at com.sun.proxy.$Proxy72.insert(Unknown Source) ~[na:na]
at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272) ~[mybatis-spring-2.0.6.jar:2.0.6]
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:62) ~[mybatis-3.5.7.jar:3.5.7]
at org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:145) ~[mybatis-3.5.7.jar:3.5.7]
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86) ~[mybatis-3.5.7.jar:3.5.7]
at com.sun.proxy.$Proxy82.insert(Unknown Source) ~[na:na]
at org.mybatis.dynamic.sql.util.mybatis3.MyBatis3Utils.insert(MyBatis3Utils.java:115) ~[mybatis-dynamic-sql-1.3.0.jar:1.3.0]
at com.example.dao.mapper.UserEntityMapper.insertSelective(UserEntityMapper.java:129) ~[main/:na]
at java.base/java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:728) ~[na:na]
at org.apache.ibatis.binding.MapperProxy$DefaultMethodInvoker.invoke(MapperProxy.java:159) ~[mybatis-3.5.7.jar:3.5.7]
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86) ~[mybatis-3.5.7.jar:3.5.7]
at com.sun.proxy.$Proxy82.insertSelective(Unknown Source) ~[na:na]
at com.example.dao.repository.UserRepositoryImpl.insertAndReturnPrimaryKey(UserRepositoryImpl.java:54) ~[main/:na]
at com.example.dao.repository.UserRepositoryImpl$$FastClassBySpringCGLIB$$e83d209f.invoke(<generated>) ~[main/:na]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.9.jar:5.3.9]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779) ~[spring-aop-5.3.9.jar:5.3.9]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.9.jar:5.3.9]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9]
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) ~[spring-tx-5.3.9.jar:5.3.9]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.9.jar:5.3.9]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750) ~[spring-aop-5.3.9.jar:5.3.9]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692) ~[spring-aop-5.3.9.jar:5.3.9]
at com.example.dao.repository.UserRepositoryImpl$$EnhancerBySpringCGLIB$$36431fb.insertAndReturnPrimaryKey(<generated>) ~[main/:na]
at com.example.core.service.UserService.createUser(UserService.java:25) ~[main/:na]
at com.example.api.facade.UserFacade.createUser(UserFacade.java:38) ~[main/:na]
at com.example.api.controller.UserController.register(UserController.java:25) ~[main/:na]
at com.example.api.controller.UserController$$FastClassBySpringCGLIB$$ba85c027.invoke(<generated>) ~[main/:na]
Metadata
Metadata
Assignees
Labels
No labels