也许任何人都可以帮助我解决使用 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
它和预期一样快。 有什么可以反对的吗?也许我的实体需要更多标签?
谢谢!
最佳答案
第一个查询没有多大意义,因为 select count(*)
仅返回 1 行。
第二个可能是您真正想要的。
第三个看起来像第二个,但根本不做同样的事情。 order by 子句应用在 where 子句之后。因此,第三个查询从表中选择前 20 行,没有任何特定顺序,并按 ID 对这 20 行进行排序。第二个查询从表中选择行,按 ID 对它们进行排序,然后仅返回这些排序行中的前 20 行。
关于java - 使用 Hibernate 和 Oracle 的奇怪查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10513801/