给定一个特定的 Hibernate Criteria,它可以被投影到一个名为 "id"
的属性,我想找出一个行的 list 索引具体编号。
使用 SQL (Oracle),我可以通过外部选择解决这个问题,得到行号(从 1 开始),然后我可以使用它来计算索引(空结果集:-1
,非空:r-1
).
select r from (select rownum as r, id from whatever) where id = 12345
注意:rownum 伪列是 Oracle 特定的。
我能否使用 Hibernate Criteria API(使用自定义投影/转换器,或任何必要的魔法)以某种方式解决此问题,以将此机制应用于任意 Criteria?
最佳答案
除非您指定“order by”,否则无法保证返回行的顺序;在 oracle 以外的数据库中(也可能是 oracle)以及 hibernate。
如果可以提供 order-by 子句,那么您可以简单地使用 indexOf在返回的集合中。假设 id 和 hashcode 按预期设置。
对于 hibernate 标准的分页,只需使用:
criteria.setMaxResults(10);
criteria.setFirstResult(20);
并相应地调整参数...示例返回 10 行,从第 20 行开始。
因此在您的示例中,无论哪个条件查询返回了 id - 在返回的集合上使用 indexof,然后将该结果添加到 setFirstResult() 参数,您将在数据库中获得行的索引。
或者,如果您不打算从 oracle 进行更改,那么总有一个 nativequery。
关于java - 使用 Hibernate Criteria 的特定行的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22530949/