【问题标题】:Strange Query using Hibernate and Oracle使用 Hibernate 和 Oracle 的奇怪查询
【发布时间】:2012-05-17 19:59:53
【问题描述】:

也许任何人都可以使用 hibernate 和 oracle 帮助我解决一个非常奇怪的行为。 这是我第一次使用hibernate和oracle,所以这对你来说可能是一个简单的步骤:)。

但是让我们来详细说一下。一个简单的 count(*) 结果:

 select * from ( select count(*) as col_0_0_ from TABLE tbl ) where rownum <= ?

这没什么大不了的,但是如果我有一个要返回的行数有限的选择,它看起来像这样:

select * from ( select SOME_FIELDS from TABLE tbl order by tbl.ID desc ) where rownum <= 20

这不是很快。如果我自己做

select * from from TABLE tbl where rownum <= 20 order by tbl.ID desc 

它和预期的一样快。 有什么可以反对的吗?也许我的实体需要更多标签?

谢谢!

【问题讨论】:

    标签: java sql oracle hibernate jpa


    【解决方案1】:

    第一个查询没有多大意义,因为 select count(*) 只返回 1 行。

    第二个可能是您真正想要的。

    第三个看起来像第二个,但根本不做同样的事情。 order by 子句应用在 where 子句之后。所以第三个查询从表中选择前 20 行,没有任何特定的顺序,并按 ID 对这 20 行进行排序。第二个查询从表中选择行,按 ID 对它们进行排序,并仅返回这些排序行中的前 20 行。

    【讨论】:

    • 您好,感谢您的回复,也许我误解了 oracle 中的 rownum 是如何工作的。现在我很清楚了。所以hibernate似乎做的绝对正确!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 2023-04-02
    相关资源
    最近更新 更多