具有Hibernate Criteria的特定行的索引

时间:2014-03-20 11:04:20

标签: java hibernate hibernate-criteria

根据可以投射到名为"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(使用自定义投影/转换器,或任何必要的魔法)以某种方式解决这个问题,将此机制应用于任意条件吗?

1 个答案:

答案 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更改,则始终存在本机查询。