民航电子数据库:表主键为自增,insert时报错:[E16005] 字段xxx不能取空值

文章讲述了在使用Mybatis插入数据到民航电子数据库时遇到的错误,原因在于数据库不允许自增主键为空。通过排查发现是数据库本身的限制,最终解决方案是在@Column注解中设置insertable=false,避免ID字段在insert时出现
摘要由CSDN通过智能技术生成


一、场景

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自带的selectByPrimaryKeydeleteByPrimaryKeyuploadByPrimaryKey方法


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( ?,?,?,?,?,? ) 
  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值