调用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的表,后来你修改了实体类,但没有重建或更新表结构
如何解决?
按以下步骤排查修复:
确认字段实际类型:先执行SQL查询,确认当前表中
entityType的真实类型:-- MySQL 写法 DESCRIBE MerchantConfig; -- 或者更精确的查询 SELECT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'MerchantConfig' AND COLUMN_NAME = 'entityType';如果结果是
int或bigint,就验证了我们的判断。修改数据库字段类型:把
entityType改回varchar类型:ALTER TABLE MerchantConfig MODIFY COLUMN entityType VARCHAR(255) DEFAULT NULL;同步Hibernate配置:检查
application.properties或application.yml中的Hibernate ddl配置,确保它能帮你同步实体类和表结构(开发环境可以用update,生产环境建议手动维护表结构):# application.properties spring.jpa.hibernate.ddl-auto=update验证多数据源(如果有):如果程序用了多个数据源,确认
MerchantConfigRespository对应的数据源和表是你预期的那一个,避免操作了错误的表。
执行完这些步骤后,再重新运行保存代码,应该就能正常提交事务了。
内容的提问来源于stack exchange,提问作者Sandeepan Nath
相关产品推荐
相关产品推荐

