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


一、场景

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( ?,?,?,?,?,? ) 

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-12 19:16:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-12 19:16:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-12 19:16:04       82 阅读
  4. Python语言-面向对象

    2024-04-12 19:16:04       91 阅读

热门阅读

  1. 请求的数据类型{ }{[ ]} 解析

    2024-04-12 19:16:04       42 阅读
  2. fastjson2 简单使用案例

    2024-04-12 19:16:04       43 阅读
  3. Qt安装 qt-unified-windows-x64-online.exe下载慢

    2024-04-12 19:16:04       34 阅读
  4. 苍穹外卖总结

    2024-04-12 19:16:04       32 阅读
  5. Yarn vs npm的大同小异&Yarn是什么?

    2024-04-12 19:16:04       39 阅读
  6. linux常用命令汇总

    2024-04-12 19:16:04       39 阅读
  7. leetcode热题HOT 200. 岛屿数量(深入理解DFS和BFS)

    2024-04-12 19:16:04       44 阅读
  8. 从入门到放弃:Docker基础教程

    2024-04-12 19:16:04       32 阅读