我正在使用带有Hibernate的MS SQL Server 2008。我的问题是Hibernate如何实现setMaxResults
setMaxResults
采取以下简单方案。
如果我有一个返回100行的查询,并且如果我将1传递给setMaxResults,这会影响SQL Server本身返回的结果(就像运行一条select top 1语句一样),还是Hibernate首先获取所有结果(在这种情况下为所有100行)并挑选最高的自己?
select top 1
我问的原因是,当行数开始增加时,它将出现巨大的性能问题。
谢谢。
Hibernate将为所有支持限制查询的方言生成一个限制类型查询。由于SQLServerDialect支持此功能(请参阅org.hibernate.dialect.SQLServerDialect.supportsLimit()和.getLimitString()),您将获得select top 1-query。
org.hibernate.dialect.SQLServerDialect.supportsLimit()
.getLimitString()
如果您想绝对确定,可以打开调试日志记录,或启用showSql-option和test。
showSql