我们正在从 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 cannot be cast to java.math.BigDecimal
我的问题是为什么它之前有效? 提醒一下,第一个更改是在 Oracle 数据库上运行的,而第二个更改是在 Postgres 数据库上运行的。请帮忙。
最佳答案
Oracle 在数据库中没有“整数”数据类型,因此所有内容都由驱动程序映射到 BigDecimal。
在 Postgres 中,整数(或 bigint)和小数之间有明显的区别,因此驱动程序为 bigint
值返回一个 BigInteger。
序列总是发出 bigint
值,因此驱动程序会为它们返回一个 BigInteger
。
关于java.math.BigInteger 无法转换为 java.math.BigDecimal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48398416/