小编Sri*_*ala的帖子

EntityManager.createNativeQuery 在使用分页时返回对象列表而不是 BigDecimal 列表

我正在尝试将分页与EntityManager.createNativeQuery(). 下面是我正在使用的骨架代码:

var query = em.createNativeQuery("select distinct id from ... group by ... having ...");
List<BigDecimal> results = query
        .setMaxResults(pageSize)
        .setFirstResult(pageNumber * pageSize)
        .getResultList();

Run Code Online (Sandbox Code Playgroud)

pageNumber是 0(第一页)时,我得到预期的 BigDecimals 列表:

但是一旦pageNumber> 0(例如,第二页),我就会得到一个对象列表,这个列表中的每个对象似乎都包含两个 BigDecimal,其中第一个包含来自数据库的值,第二个 BigDecimal 似乎是这一行的位置。

显然我得到了这个例外

java.lang.ClassCastException: 类 [Ljava.lang.Object; 不能强制转换为 java.math.BigDecimal 类

有人可以解释这种差异,以及如何修复它以始终返回 BigDecimals 列表?谢谢你。

更新 1:我创建了一个示例项目来重现此问题。我只能使用 Oracle 数据库重现此问题。使用 H2 数据库,它运行良好,并且我始终得到一个与页码无关的 BigDecimals 列表。

更新 2:我还使用 H2创建了一个示例项目,它可以在没有此问题的情况下工作。

java oracle pagination hibernate entitymanager

13
推荐指数
2
解决办法
2067
查看次数

标签 统计

entitymanager ×1

hibernate ×1

java ×1

oracle ×1

pagination ×1