根据可以投射到名为"id"
的属性的特定 Hibernate Criteria ,我想找出具有特定ID 列表索引>
使用SQL(Oracle),我可以使用外部选择来解决这个问题,从而产生行号(从1开始),然后我可以使用它来计算索引(空结果集:-1
,非空:r-1
)。
select r from (select rownum as r, id from whatever) where id = 12345
注意:rownum伪列是Oracle特定的。
我可以使用Hibernate Criteria API(使用自定义投影/转换器,或任何必要的魔法)以某种方式解决这个问题,将此机制应用于任意条件吗?
答案 0 :(得分:-1)
除非您指定" order by&#34 ;;否则无法保证返回的行的顺序。在oracle以外的数据库中(也可能是oracle)以及hibernate。
如果可以提供order-by子句,则可以在返回的集合中使用indexOf。假设id和hashcode按预期设置。
对于hibernate标准的分页,只需使用:
criteria.setMaxResults(10);
criteria.setFirstResult(20);
并相应地调整参数......该示例返回10行,从第20行开始。
因此,在您的示例中,无论哪个条件查询返回id - 在返回的集合上使用indexof,然后将该结果添加到setFirstResult()参数,并且您将在数据库中拥有行索引。
或者,如果您不打算从oracle更改,则始终存在本机查询。