使用JPA和Oracle数据库分页

时间:2019-09-20 18:24:39

标签: oracle jpa

这周,我正在研究WebApp中的排序问题。在浏览器中按所选列对表格进行排序无法正常工作。事实证明,在该应用程序中,我们使用JPA CriteriaQuery创建查询,然后为分页创建TypedQuery,如下所示:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<SomeEntity> q = cb.createQuery(SomeEntity.class);
Root<SomeEntity> c = q.from(SomeEntity.class);
q.select(c);
...
q.orderBy(cb.asc(c.get("SomeColumn")));
TypedQuery<> query = em.createQuery(q);
query.setFirstResult(pageIx * pageSize);
query.setMaxResults(pageSize);
...

这几乎是文档建议创建查询(see here)的方式。

在日志中,我看到这会生成一个SQL查询,如下所示:

select * from (
    select lots_of_columns from some_view order by selected_column
) where rownum <= 50

自从Oralce 10开始以来,根据文档,封闭的select的顺序无效,并且,如果我没记错的话,根据关系代数这也很有意义。我们使用Oracle 12c。

所以我的问题是,我应该如何正确解决这个问题? 我发现应该使用offsetfetch,但是我找不到如何告诉JPA相应地生成SQL的方法。我也发现了一条建议将id添加到order by子句的帖子,但这也不能解决问题。

预先感谢您对此主题的任何想法和提示。

0 个答案:

没有答案