项目场景:
这里简述项目相关背景:
配置springboot后,使用通用mapper的insertSelective方法进行有选择性地插入,正确配置了pojo中的User( @Id和@KeySql(useGeneratedKeys = true)注解),最后进行test测试时故意将主键id的值进行缺省,测试时报错
问题描述:
提交User的属性时发现,主键id的值缺省后就会以下报错,其余字段的值均可以进行缺省提交。
Creating a new SqlSession
Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@36920bd6]
JDBC Connection [HikariProxyConnection@1888400144 wrapping com.mysql.cj.jdbc.ConnectionImpl@6ebc9573] will be managed by Spring
==> Preparing: INSERT INTO springboot_user ( id,username,password ) VALUES( ?,?,? )
==> Parameters: null, xia(String), 123(String)
Releasing transactional SqlSession
[org.apache.ibatis.session.defaults.DefaultSqlSession@36920bd6]
Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@36920bd6]
Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@36920bd6]
org.springframework.dao.DataIntegrityViolationException:
### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Column 'id' cannot be null
### The error may exist in com/fcy/mapper/UserMapper.java (best guess)
### The error may involve com.fcy.mapper.UserMapper.insertSelective-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO springboot_user ( id,username,password ) VALUES( ?,?,? )
### Cause: java.sql.SQLIntegrityConstraintViolationException: Column 'id' cannot be null
; Column 'id' cannot be null; nested exception is java.sql.SQLIntegrityConstraintViolationException: Column 'id' cannot be null
原因分析:
报错表明:提交的字段 ”id“ 不能为null,但是前面设置通用模板的时候已经设置”insertSelective“,其余字段可以进行缺省提交说明pojo的配置和insertSelective的使用均正确,应该是数据库的表的问题。字段”id“为主键,但是没有设置为自增长。
解决方案:
需进行如下操作,将主键”id“设置为自增长。