所以我有:
PK栏:
id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT
具有id
字段
java.math.BigInteger id field
映射器插入方法:
@Insert("INSERT INTO " +
"table_name (" +
"created_at_ts, " +
"updated_at_ts" +
") " +
"VALUES (" +
"UNIX_TIMESTAMP(), " +
"UNIX_TIMESTAMP()" +
")")
@Options(useGeneratedKeys = true, keyColumn = "id")
void insert(Entity entity);
调用mapper insert方法,如:
commandMapper.insert(entity);
所有这一切都可以正常工作,直到成功插入一定数量的行。在子表中插入行时,我突然收到以下错误:
org.springframework.dao.DataIntegrityViolationException:
### Error updating database. Cause: java.sql.BatchUpdateException:
Out of range value for column 'parent_id' at row 1
看起来以下结果是可以的:
SELECT Auto_increment FROM information_schema.tables WHERE
table_name='table';
-> 32770
但实体的BigInteger id字段的值是错误的:
System.out.println(entity.getId());
-> -32767
如何在实体POJO中以负值结束?
显然:
BigIntegerTypeHandler
无法解决问题BIGINT UNSIGNED
切换到INT UNSIGNED
,从java.math.BigInteger
切换到Long
修复了此问题。但可能有另一种方式?
非常感谢。
答案 0 :(得分:0)
不得不碰撞spring-jdbc和mariadb-java-client来解决这个问题。