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

Oracle转PostgreSQL遇类型转换错误:BigInteger无法转为BigDecimal

为啥Oracle环境下的代码能正常运行,PostgreSQL却报类型转换错?

这事儿核心是两个数据库对序列返回值的JDBC映射类型不一样:

Oracle这边的情况

  • Oracle里序列的NEXTVAL返回的是NUMBER类型,JDBC驱动会把这个类型直接映射为java.math.BigDecimal。所以你原代码里把查询结果强转成BigDecimal完全匹配,自然不会出问题。至于from DUAL只是Oracle用来执行无表查询的虚表语法,不影响返回值的类型映射。

PostgreSQL这边的差异

  • PostgreSQL默认创建的序列返回的是BIGINT类型,JDBC驱动会把它映射为java.math.BigInteger。这时候你还强行把结果转成BigDecimal,就会触发java.math.BigInteger cannot be cast to java.math.BigDecimal的异常了。

给你个快速解决办法

如果想继续用BigDecimal接收结果,有两种方式:

  1. 把查询结果显式转成PostgreSQL的numeric类型(对应JDBC的BigDecimal):
    Query query = getEntityManager().createNativeQuery("SELECT NEXTVAL('pc_site_group_id_seq')::numeric");
    BigDecimal result = (BigDecimal) query.getSingleResult();
    
  2. 先接收为BigInteger再转成BigDecimal:
    BigInteger seqValue = (BigInteger) query.getSingleResult();
    BigDecimal result = new BigDecimal(seqValue);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:04:27