如何修复java.sql.SQLException: 无法将14:50转换为INTEGER错误
问题修复方案
这个错误的核心原因是Hibernate映射时类型不匹配:数据库中存储的是时分格式的字符串(如14:50),但你的实体类(UIModel.java)对应字段被定义为Integer类型,导致Hibernate尝试将字符串转成整数时失败。直接执行SQL正常是因为SQL仅返回原始数据,不会做对象类型映射。
修复步骤如下:
- 修正实体类字段类型
打开UIModel.java,找到对应存储14:50的字段,将其类型从Integer改为String(仅需存储显示时)或LocalTime(Java 8+,需要处理时间逻辑时):// 错误写法 private Integer timeField; // 正确写法(二选一) private String timeField; // 或者用时间类型(需引入java.time.LocalTime) private LocalTime timeField; - 调整Hibernate映射配置
- 若使用注解映射:如果用
LocalTime,需确保Hibernate版本为5.2+,并可添加@Column注解明确字段类型:@Column(name = "your_time_column", columnDefinition = "TIME") private LocalTime timeField; - 若使用XML映射:将对应
<property>的type属性从int改为string或java.time.LocalTime:<property name="timeField" column="your_time_column" type="string"/>
- 若使用注解映射:如果用
- 检查DAO层查询逻辑
查看DaoImp.java中的HQL/Criteria查询,确认没有强制将该字段转为整数的操作(比如cast(timeField as int)),如果有则删除该错误转换逻辑。 - 特殊场景处理
如果数据库字段实际是整数(如存储1450表示14:50),但查询时用SQL函数(如DATE_FORMAT)将其格式化为14:50字符串返回,此时需二选一:- 去掉查询中的格式化函数,返回原始整数值,在Java代码中再转换为时分格式;
- 保持查询的格式化结果,将实体类字段改为
String类型。
内容的提问来源于stack exchange,提问作者user20263794
相关产品推荐
相关产品推荐

