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

PostgreSQL+MyBatis插入报错:Bad value for type long 排查求助

问题根源与解决方案

问题定位

报错org.postgresql.util.PSQLException: Bad value for type long : vOghoo10L9的核心原因是:MyBatis尝试将字符串类型的app_id(值为vOghoo10L9)当作long数值类型绑定到SQL参数,与数据库user_sub表中app_id的varchar类型不匹配。

虽然你在Mapper XML中明确指定了#{appId,jdbcType=VARCHAR},但MyBatis会优先根据实体类UserSub的字段类型推断JDBC类型。如果实体类的appId字段被定义为Long或long类型,就会触发这个类型转换错误。

解决步骤

  1. 修正实体类字段类型
    打开com.dolphin.soa.post.model.entity.UserSub类,将appId字段的类型从Long/long修改为String:

    // 错误写法
    private Long appId;
    // 正确写法
    private String appId;
    
  2. 同步更新Getter/Setter
    如果是手动编写的Getter/Setter,同步将返回值和参数类型改为String;如果使用Lombok注解(如@Data),只需修改字段类型即可自动生成正确的方法。

  3. 重新编译并测试
    重新编译项目,重启服务后再次触发支付宝通知的插入逻辑,验证是否解决报错。

额外排查点

如果实体类类型本身正确,检查以下场景:

  • 支付宝通知的参数解析环节是否错误地将app_id转为数值类型后再赋值给UserSub对象
  • 是否存在其他代码逻辑(如DTO转实体类)将字符串app_id赋值给了数值类型的字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 21:17:42