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

调用JPA Repository.save()时entityType字段报整数格式错误

问题分析与解决方案

这个问题看起来有点矛盾:实体类里entityType是String类型,Hibernate日志也显示建表时该字段是varchar,但保存数据时却抛出了整数格式错误?其实核心原因很明确——你当前程序操作的数据库表中,entityType字段的实际类型是整数(int/bigint),而非varchar。

为什么会出现这种矛盾?

可能的场景包括:

  • 你手动修改过数据库表结构,把entityType从varchar改成了整数类型,但没同步更新实体类或Hibernate的表结构同步配置
  • Hibernate的hibernate.hbm2ddl.auto配置不是create或update(比如设成了none或validate),导致实体类的修改没有同步到数据库表
  • 程序使用了多数据源,实际操作的不是你查看的那张MerchantConfig表
  • 之前Hibernate生成过带有整数类型entityType的表,后来你修改了实体类,但没有重建或更新表结构

如何解决?

按以下步骤排查修复:

  1. 确认字段实际类型:先执行SQL查询,确认当前表中entityType的真实类型:

    -- MySQL 写法
    DESCRIBE MerchantConfig;
    -- 或者更精确的查询
    SELECT DATA_TYPE 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME = 'MerchantConfig' 
      AND COLUMN_NAME = 'entityType';
    

    如果结果是int或bigint,就验证了我们的判断。

  2. 修改数据库字段类型:把entityType改回varchar类型:

    ALTER TABLE MerchantConfig 
    MODIFY COLUMN entityType VARCHAR(255) DEFAULT NULL;
    
  3. 同步Hibernate配置:检查application.properties或application.yml中的Hibernate ddl配置,确保它能帮你同步实体类和表结构(开发环境可以用update,生产环境建议手动维护表结构):

    # application.properties
    spring.jpa.hibernate.ddl-auto=update
    
  4. 验证多数据源(如果有):如果程序用了多个数据源,确认MerchantConfigRespository对应的数据源和表是你预期的那一个,避免操作了错误的表。

执行完这些步骤后,再重新运行保存代码,应该就能正常提交事务了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 14:47:48