java - 使用 Hibernate Criteria 的特定行的索引

标签 java hibernate hibernate-criteria

给定一个特定的 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/

相关文章:

java - ConcurrentHashMap 和 Fibonacci 数 - 不一致的结果

java.lang.UnsupportedOperationException : The application must supply JDBC connections 异常

带有数据条件的 Grails Criteria 查询

java - Hibernate Criteria 在限制中使用集合(Set)

java - 相当于 Objective c 中的 BeanUtils.copyProperties。

java - 如何从单独的 Jar 加载 @Configuration 类

java - 除了覆盖算术运算符之外,还有其他方法可以在 Java 中实现 "overflow safe"算术运算吗?

java - Spring Hibernate 中动态选择数据源 - 方法

java - Lucene 查询 @indexedEmbedded 对象 id

java - 谓词与抽象类类型定义之间的 Hibernate 标准构建器