使用Hibernate和Oracle的奇怪查询

时间:2012-05-09 09:57:16

标签: java sql oracle hibernate jpa

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

但让我们详细说明。简单计数(*)会导致:

 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 

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

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