DataIntegrityViolationException: Error attempting to get column ‘xx‘——DataIntegrityViolationExceptio
一、解决办法
项目中在更新数据库时出现异常,org.springframework.dao.DataIntegrityViolationException,当然如果控制台直接报这个异常问题的解决估计也不至于让我写篇博客。
先说这个异常代表的含义吧:
这个异常的意思就是在更新(update或insert)数据库时,新的数据违反了完整性,例如主键重复,我这里的问题是数据库的id字段未设置自增,默认值也没设,在插入的时候就出现了这个异常,问题的解决很简单,修改数据库id字段为自增字段,完美解决。
出现这个问题的时候应该去查看更新的字段的数据与数据库中对应字段的属性是否有冲突的地方,或者是待更新的数据本身的问题。
DataIntegrityViolationException: Error attempting to get column ‘xx’
项目背景
项目整体采用的是springboot+mybatis 方式。有一次做数据查询的时候。console突然报:DataIntegrityViolationException: Error attempting to get column ‘xx’…异常。起初没在意。以为是xml中的SQL写错了,排查了没问题。百度一下这个报错,说是实体类属性与数据库字段类型不一致引起的,记录一下防止后续在遇到相似问题。
简单写一下出问题的xml及返回值类型:
1 mapper:
<select id="getUserList" paramType="java.lang.Integer" resultType="com.rllc.pcloud.po.UserPo">
select id,name,date,sign,del from sys_users where id=#{userId}
</select>
2 UserPo:
@Data
public class UserPo{
private Integer id;
private String name;
private String password;
// 问题就出在这个有参构造方法中
public UserPo(String id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
}
问题就出在这个有参的构造方法中。而没有无参构造方法。没有无参构造函数时,mybatsi为啥报这个错误呢?此时只有一个包含全部属性的构造函数,mybatis就会找出这些属性对应的值,并实例化一个实体类对象。在找属性对应的值时,mybatis会按照实体类全属性的构造函数的入参顺序,与sql的查询结果对应,如果实体类的属性和sql结果列不能匹配时都会报错。
综上所述,问题定位了,就很好解决:
补上无参构造方法:
public class UserPo{
private Integer id;
private String name;
private String password;
public UserPo(){
}
// 问题就出在这个有参构造方法中
public UserPo(String id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
}
OK了.
相关文章
- ERROR: Could not install packages due to an OSError…解决方法
- MySQL启动报错[ERROR] Fatal error: Please read “Security“ section of the....to run mysqld as root!
- PHP CURL GET HTTPS报错SSL certificate problem: unable to get local issuer certificate
- To add browser notifications to an online customer support live chat service system - gofly - self h
- ORA-39804: The load was aborted due to an error loading parent string while also loading child string. ORACLE 报错 故障修复 远程处理
- MySQL Error number: 3098; Symbol: ER_BEFORE_DML_VALIDATION_ERROR; SQLSTATE: HY000 报错 故障修复 远程处理
- ORA-01171: datafile string going offline due to error advancing checkpoint ORACLE 报错 故障修复 远程处理
- MySQL Error number: MY-010939; Symbol: ER_FAILED_TO_GET_ABSOLUTE_PATH; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: MY-011232; Symbol: ER_VALIDATE_PWD_FAILED_TO_GET_FLD_FROM_SECURITY_CTX; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: MY-011319; Symbol: ER_XPLUGIN_ERROR_WRITING_TO_CLIENT; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: MY-011340; Symbol: ER_XPLUGIN_FAILED_TO_GET_SYS_VAR; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: MY-011354; Symbol: ER_KEYRING_FAILED_TO_CREATE_KEYRING_DIR; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: MY-011365; Symbol: ER_KEYRING_FAILED_TO_GET_FILE_STAT; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: MY-011381; Symbol: ER_KEYRING_OKV_FAILED_TO_GENERATE_KEY_DUE_TO_INTERNAL_ERROR; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: MY-011398; Symbol: ER_KEYRING_OKV_FAILED_TO_LOAD_SSL_TRUST_STORE; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: MY-011427; Symbol: ER_KEYRING_AWS_FAILED_TO_GET_KMS_CREDENTIAL_FROM_CONF_FILE; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: MY-011431; Symbol: ER_KEYRING_AWS_FAILED_TO_GENERATE_KEY_DUE_TO_INTERNAL_ERROR; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: MY-011464; Symbol: ER_GRP_RPL_ADD_GTID_TO_GRPGTID_EXECUTED_ERROR; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: MY-011591; Symbol: ER_GRP_RPL_FAILED_TO_BROADCAST_GRP_MEMBERSHIP_NOTIFICATION; SQLSTATE: HY000 报错 故障修复 远程处理
- ORA-07211: slgcs: gettimeofday error, unable to get wall clock. ORACLE 报错 故障修复 远程处理
- ORA-07212: slcpu: times error, unable to get cpu time. ORACLE 报错 故障修复 远程处理
- ORA-07261: spdde: kill error, unable to send signal to process. ORACLE 报错 故障修复 远程处理
- MySQL Error number: MY-011772; Symbol: ER_LDAP_AUTH_FAILED_TO_GET_CONNECTION_AS_PLUGIN_NOT_READY; SQLSTATE: HY000 报错 故障修复 远程处理
- ORA-09877: sstascre: shmget error, unable to get a shared memory segment. ORACLE 报错 故障修复 远程处理
- MySQL Error number: MY-013286; Symbol: ER_SERVER_RPL_ENCRYPTION_FAILED_TO_REMOVE_KEY; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL Error number: MY-013791; Symbol: ER_GRP_RPL_SLAVE_THREAD_ERROR_ON_SECONDARY_MEMBER; SQLSTATE: HY000 报错 故障修复 远程处理
- PHP Fatal error: Uncaught Error: Call to undefined function pcntl_fork().. 开启php pcntl扩展实现多进程详解编程语言