目录
一、场景
1、对接民航电子数据库
2、表的主键为自增主键,使用mybatis
封装好的insert
方法新增记录时报错
二、报错信息
### Error updating database. Cause: java.sql.SQLException: [E16005] 字段ID不能取空值
### The error may involve com.xxx.mapper.base.power.SysPowerMapper.insert-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO t_sys_powertype ( ID,powerType,description,lastUpdateOper,lastUpdateDate,VDNID,isSynCti ) VALUES( ?,?,?,?,?,?,? )
### Cause: java.sql.SQLException: [E16005] 字段ID不能取空值
; uncategorized SQLException; SQL state [cae16005]; error code [16005]; [E16005] 字段ID不能取空值 ; nested exception is java.sql.SQLException: [E16005] 字段ID不能取空值
org.springframework.jdbc.UncategorizedSQLException:
### Error updating database. Cause: java.sql.SQLException: [E16005] 字段ID不能取空值
### The error may involve com.xxx.mapper.base.power.SysPowerMapper.insert-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO t_sys_powertype ( ID,powerType,description,lastUpdateOper,lastUpdateDate,VDNID,isSynCti ) VALUES( ?,?,?,?,?,?,? )
### Cause: java.sql.SQLException: [E16005] 字段ID不能取空值
; uncategorized SQLException; SQL state [cae16005]; error code [16005]; [E16005] 字段ID不能取空值 ; nested exception is java.sql.SQLException: [E16005] 字段ID不能取空值
三、排查
1、认为是民航电子数据库需要手动声明该字段是自增主键,为字段添加@GeneratedValue
主键(无效,依旧报错)
2、认为是@Id
注解导致,去除@Id
(无效,依旧报错),而且去除后会影响到mybatis
自带的selectByPrimaryKey
、deleteByPrimaryKey
、uploadByPrimaryKey
方法
3、将报错的SQL拿到民航电子数据库(CAE)
的数据库管理工具CAEManager.exe
执行,依旧会报错,该问题与代码无关
四、原因
民航电子数据库(CAE)
本身语法的问题,只要在insert时带上了主键,就算是自增主键,也不能为null
五、解决
在@Column
注解设置insertable = false
,表示该字段不参与insert
这样在调用mybatis
封装好的insert
方法时,SQL会去除ID字段
INSERT INTO t_sys_powertype ( ID,powerType,description,lastUpdateOper,lastUpdateDate,VDNID,isSynCti ) VALUES( ?,?,?,?,?,?,? )
变为
INSERT INTO t_sys_powertype ( powerType,description,lastUpdateOper,lastUpdateDate,VDNID,isSynCti ) VALUES( ?,?,?,?,?,? )
标签:insert,自增,ID,空值,字段,SQLException,E16005,主键,###
From: https://blog.csdn.net/weixin_52116015/article/details/137537730