You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复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字符串返回,此时需二选一:
    1. 去掉查询中的格式化函数,返回原始整数值,在Java代码中再转换为时分格式;
    2. 保持查询的格式化结果,将实体类字段改为String类型。

内容的提问来源于stack exchange,提问作者user20263794

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 12:10:31