若依报错org.springframework.dao.DataIntegrityViolationException

org.springframework.dao.DataIntegrityViolationException: Error attempting to get column 'sfz' from result set. Cause: java.sql.SQLDataException: Cannot determine value type from string '2222222222XXXXXX'

且报错信息中对应表里第一个字段sfz直接报出来

直接找到对应xml里写的SQL,肯定是 指定的 resultType 和 SQL查询所 返回的数据类型不一致 , 例如下面这种情况:

一、报错核心含义解析

这个报错是数据库结果集与 Java 实体类的类型映射异常,拆解后核心信息如下:

  1. org.springframework.dao.DataIntegrityViolationException :Spring 封装的数据完整性异常 ,此处并非主键冲突 / 非空约束等传统完整性问题,而是结果集字段类型转换失败导致的 "逻辑上的数据完整性破坏";
  2. Error attempting to get column 'sfz' from result set :从数据库结果集中读取列名sfz(身份证号)的值时出错;
  3. java.sql.SQLDataException: Cannot determine value type from string '2222222222XXXXXX' :JDBC 驱动无法将字符串值2222222222XXXXXX(含字母 / 特殊字符的身份证号)转换为 Java 实体类中sfz字段的目标类型,本质是类型不匹配

简单来说:Java 实体类中sfz字段的类型,与数据库sfz列的字符串值(含非数字字符)无法兼容,JDBC 驱动无法完成自动类型转换,从而抛出异常

二、典型判断

看到该报错可立刻做出以下核心判断:

  1. 根因是「类型映射不匹配」 :实体类中sfz字段的类型不是字符串(String ,而是数字类型(Long/Integer/BigDecimal),但数据库中sfz列存储的是含XXXX等非数字字符的字符串,无法转换为数字类型;
  2. 非数据库存储异常 :数据库中sfz列的类型本身是字符型(VARCHAR/CHAR),存储值无问题,问题出在Java 端的类型接收
  3. 映射层面的错误 :要么是 MyBatis/MyBatis-Plus 的自动映射规则错误,要么是手动配置的ResultMapsfz列映射到了非字符串类型的字段;
  4. 数据特征触发sfz值含XXXX(身份证号脱敏后的字符)是关键,若为纯数字可能不会报错,非数字字符直接暴露了类型不匹配的问题。

解决:

该报错的核心是实体类sfz字段类型与数据库字符串值不匹配,解决优先级为:

  1. 将实体类中sfz字段改为String类型;
  2. 修正 MyBatis ResultMap的类型映射配置;
  3. 若使用自定义类型,添加对应的类型处理器;
  4. 修正数据库列类型(若为数字类型)。

通过规范 "字符型字段用 String 接收" 的开发原则,可彻底避免此类类型转换异常。

相关推荐
YOU OU8 小时前
Redis基础常识与命令
数据库·redis·缓存
Database_Cool_10 小时前
OLTP 和 OLAP 区别详解:分析型数据库和事务型数据库怎么选(附阿里云 AnalyticDB MySQL 选型指南)
数据库·mysql·阿里云
爱写代码的阿森11 小时前
鸿蒙三方库 | harmony-utils之KvUtil键值型数据库操作详解
数据库·华为·harmonyos·鸿蒙·huawei
Database_Cool_11 小时前
单机 MySQL 迁移到分布式数据库方便吗?阿里云 PolarDB-X 100% MySQL 协议兼容零改造平滑迁移
数据库·分布式·mysql
姜太小白12 小时前
【MySQL】 索引优化实战:解决 WHERE 等值 + IS NULL 查询,TEXT 字段报错 1167 的完整指南
数据库·mysql
窝子面12 小时前
手搓最简前后端协作-node
javascript·数据库
吳所畏惧12 小时前
宝塔面板Redis密码修改指南:SSH命令修改 vs 面板UI界面修改,哪个更靠谱?
运维·服务器·数据库·redis·缓存·ssh
DFT计算杂谈12 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
HPFBoy13 小时前
log4net 数据库存日志正确配置
数据库