diff --git a/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/biz/BizIdColumnField.java b/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/biz/BizIdColumnField.java index 09f259b76dcebc2fd1bbbeee813f2d77fb341adf..ea9f3e16c0a988139ded4faff61a44640132aa4e 100644 --- a/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/biz/BizIdColumnField.java +++ b/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/biz/BizIdColumnField.java @@ -20,6 +20,8 @@ public class BizIdColumnField { private final String columnName; + private final Class fieldType; + private final MethodHandle bizIdFieldGetterMethodHandle; private final MethodHandle bizIdFieldSetterMethodHandle; @@ -27,8 +29,8 @@ public class BizIdColumnField { public BizIdColumnField(Class entityClass, Field bizIdField) { this.annotation = bizIdField.getAnnotation(BizId.class); this.columnName = BizIdHelper.getColumnName(entityClass, bizIdField, this.annotation); + this.fieldType = bizIdField.getType(); try { - Class fieldType = bizIdField.getType(); Lookup lookup = privateLookupIn(entityClass, lookup()); this.bizIdFieldGetterMethodHandle = lookup.findGetter(entityClass, bizIdField.getName(), fieldType); this.bizIdFieldSetterMethodHandle = lookup.findSetter(entityClass, bizIdField.getName(), fieldType); @@ -54,4 +56,8 @@ public class BizIdColumnField { } } -} + public Class getFieldType() { + return fieldType; + } + +} \ No newline at end of file diff --git a/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/biz/BizIdInjectInterceptor.java b/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/biz/BizIdInjectInterceptor.java index 09f64b56d1a6f20ce3d1d20d5401e99b256e0705..5ed98934ee1deefd00854b85008c6764aab71c0d 100644 --- a/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/biz/BizIdInjectInterceptor.java +++ b/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/biz/BizIdInjectInterceptor.java @@ -1,6 +1,8 @@ package com.schbrain.framework.autoconfigure.mybatis.biz; +import cn.hutool.core.convert.Convert; import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; +import com.schbrain.common.exception.BaseException; import org.apache.ibatis.executor.Executor; import org.apache.ibatis.mapping.MappedStatement; import org.apache.ibatis.mapping.SqlCommandType; @@ -32,9 +34,15 @@ public class BizIdInjectInterceptor implements InnerInterceptor { if (bizIdType == BizIdType.ID_WORKER) { Object bizIdValue = bizColumnField.getValue(entity); if (bizIdValue == null) { - bizColumnField.setValue(entity, bizIdType.generateBizId(entity)); + Object generatedBizId = bizIdType.generateBizId(entity); + Class bizIdFieldType = bizColumnField.getFieldType(); + Object convertedBizId = Convert.convertQuietly(bizIdFieldType, generatedBizId, null); + if (convertedBizId == null) { + throw new BaseException(String.format("Cannot convert generated bizId value %s; From %s to %s", generatedBizId, generatedBizId.getClass(), bizIdFieldType)); + } + bizColumnField.setValue(entity, convertedBizId); } } } -} +} \ No newline at end of file