Skip to content

Commit

Permalink
fix: 使用mysql自动生成主键策略时,dbm使用GeneratedKeyHolder把生成的id设置回实体时,会抛错
Browse files Browse the repository at this point in the history
使用mysql自动生成主键策略时,dbm使用GeneratedKeyHolder把生成的id设置回实体时,会抛错

fix #41
  • Loading branch information
wayshall committed Dec 14, 2021
1 parent 7e7bbcf commit 47ec138
Showing 1 changed file with 5 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import java.util.List;

import org.onetwo.common.convert.Types;
import org.onetwo.common.utils.LangUtils;
import org.onetwo.dbm.event.spi.DbmInsertEvent;
import org.onetwo.dbm.exception.DbmException;
Expand Down Expand Up @@ -82,7 +83,10 @@ protected void doInsert(DbmInsertEvent event, DbmMappedEntry entry) {
updateCount += es.getDbmJdbcOperations().updateWith(new SimpleArgsPreparedStatementCreator(sql, arg), keyHolder);
if (keyHolder.getKey()!=null) {
//TODO 如果有多个自动生成字段,这里还需要处理
entry.setId(objects.get(index++), keyHolder.getKey());
// 不同版本的jdbc(spring?没细究……)驱动获取到的key对象不同,有的是bigint类型,这里需要转换为对象的实际类型
Class<?> idType = entry.getIdentifyFields().get(0).getPropertyInfo().getType();
Object generatedId = Types.convertValue(keyHolder.getKey(), idType);
entry.setId(objects.get(index++), generatedId);
}
}
}else{
Expand Down

0 comments on commit 47ec138

Please sign in to comment.