java.math.BigInteger无法强制转换为java.math.BigDecimal

时间:2018-01-23 09:38:27

标签: java sql oracle postgresql math

我们正在从Oracle迁移到PostgreSQL。某些特定于Oracle的查询必须更改为Postgres等效项。以下是一个这样的提交:

最初,

Query query = getEntityManager().createNativeQuery("SELECT PC_SITE_GROUP_ID_SEQ.NEXTVAL from DUAL");
BigDecimal result = (BigDecimal) query.getSingleResult();

更改为,

Query query = getEntityManager().createNativeQuery("SELECT NEXTVAL('pc_site_group_id_seq')");
BigDecimal result = (BigDecimal) query.getSingleResult();

在运行时,在更改之后,它会抛出错误,

  

java.math.BigInteger无法强制转换为java.math.BigDecimal

我的问题是为什么之前有效? 提醒一下,第一个更改是在Oracle数据库上运行,而第二个更改是在Postgres数据库上运行。请帮忙。

1 个答案:

答案 0 :(得分:3)

Oracle在数据库中没有“整数”数据类型,因此驱动程序将所有内容映射到BigDecimal。

在Postgres中,整数(或bigint)和小数之间有明显的区别,因此驱动程序返回bigint值的BigInteger。

序列始终会发出bigint个值,因此驱动程序会为它们返回BigInteger