报错:Cause: java.sql.SQLDataException: Value ‘X’ is outside of valid range for typ

91 阅读1分钟

现象: 业务需求的原因,给表新增了几个字段,数据库表字段的新增顺序,与实体类PO的顺序不一致;查询的时候报错:Caused by: org.springframework.dao.DataIntegrityViolationException: Error attempting to get column 'created_at' from result set. Cause: java.sql.SQLDataException: Value '1693818073415' is outside of valid range for type java.lang.Integer ; Value '1693818073415' is outside of valid range for type java.lang.Integer;

image.png

刚开始以为是实体类PO 的字段类型定义的是Integer,检查代码发现,实体类定义的字段类型是Long,这就很奇怪了,在网上查了一些资料才发现,是因为实体类PO 用了lombok 注解,但是呢,又没有设置无参的构造方法,导致mybaitis在 result set 反射成PO对象时,根据PO类字段的顺序赋值,导致数据库新增字段映射到了其他字段上面,导致了数据类型不匹配; 解决方案: 1.在PO 对象上加上 @AllArgsConstructor
@NoArgsConstructor

2.或者 将PO类字段的顺序与sql 查询出来的顺序保持一致

实体类

image.png

数据库表

image.png