Spring Data JPA只读查询报错:Invalid value for getInt() - 'BO'
问题排查方案
从堆栈信息里的Invalid value for getInt() - 'BO'可以直接定位核心问题:JDBC尝试将数据库中的字符串值'BO'转换为Java的int类型时失败,这和查询是只读操作没有关系,本质是实体类与数据库字段的类型映射不匹配。
具体排查方向
- 检查
Org实体类的字段映射- 重点看
oldOrgId字段:如果数据库中该字段是VARCHAR/CHAR类型,但Java实体里定义成了Long或int,当数据库中存在'BO'这类非数字值时,查询就会触发类型转换错误。 - 检查
STATUS枚举的映射配置:如果你的枚举使用了@Enumerated(EnumType.ORDINAL)注解,但数据库中status列存的是枚举的字符串值(比如'BO'),Hibernate会试图把字符串转成枚举的序号(int类型),直接导致报错。这种情况要把注解改成@Enumerated(EnumType.STRING)。
- 重点看
- 核对数据库表的实际数据
直接执行SQL查询对应的表(比如SELECT oldOrgId, status FROM org_table WHERE ...),确认oldOrgId或status列中是否存在'BO'这个值,同时核对这两个字段的数据库类型是否和Java实体定义一致。
快速验证方法
可以先写一个原生SQL查询测试:
@Query(value = "SELECT * FROM org WHERE old_org_id = ?1 AND status = ?2", nativeQuery = true) Org findByOldOrgIdAndStatusNative(String orgId, String status);
如果这个查询能正常返回结果,就说明是实体类的类型映射和数据库实际类型不匹配导致的问题。
内容的提问来源于stack exchange,提问作者rebel_codeaz
相关产品推荐
相关产品推荐

