【问题标题】:Using Hibernate setFirstResult without any ordering在没有任何排序的情况下使用 Hibernate setFirstResult
【发布时间】:2012-09-30 13:18:10
【问题描述】:

我是休眠新手。我对标准的setFirstResult 方法感到困惑。 从文档看来,hibernate 从给定的数字返回行。

由于 SQL 查询不保证没有 order by 子句的行的顺序, setFirstQuery 在这种情况下如何工作(没有 orderBy 子句)? hibernate 是否从数据库中读取索引信息?

如果我多次执行相同的 SQL 查询,排序可能会改变,在这种情况下,setFirstResult 是如何工作的?

【问题讨论】:

    标签: java hibernate hibernate-criteria


    【解决方案1】:

    除非底层数据库支持,否则 Hibernate 不能自己做某事。因为 Hibernate 查询最终只转换为 Sql

    虽然说它使用 PostgresSQL 和 MySQL 等底层数据库功能,但它会生成类似 limit ? offset ? 的查询。

    您可以使用addOrder添加自定义订单

    .addOrder( Order.asc("name") )
    

    【讨论】:

    • 这里关于“默认情况下它将是主键上的排序方式”的部分是不准确的。 Hibernate 不添加隐式排序,返回结果的顺序完全由底层数据库决定。
    • 我知道 PostgreSQL 和 MySQL 它使用 Limit 和 offset 但没有这些,即。 Oracle数据库它用什么?
    【解决方案2】:

    添加订单是您的任务,如果对同一组数据执行多次,您注意到的功能将无法保证相同的结果。 setFirstResult 通常用于分页。

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 2022-11-07
      • 2019-08-24
      • 2011-01-18
      • 2014-02-06
      • 2016-01-23
      • 2012-02-21
      • 1970-01-01
      • 2012-05-23
      相关资源
      最近更新 更多