Hibernate中的setMaxResults(N)如何工作?

时间:2013-02-28 01:23:31

标签: sql-server sql-server-2008 hibernate

我正在使用带有Hibernate的MS SQL server 2008。我的问题是Hibernate如何实现setMaxResults

采取以下简单方案。

如果我有一个返回100行的查询,如果我将1传递给setMaxResults,这是否会影响SQL服务器本身的返回结果(就像运行select top 1语句一样)或Hibernate首先获得所有结果(在这种情况下,所有100行)并选择顶部的结果?

我要问的原因是,当行数开始增长时会出现巨大的性能问题。

谢谢。

2 个答案:

答案 0 :(得分:3)

Hibernate将为所有支持限制查询的方言生成限制类型查询。由于SQLServerDialect支持此功能(请参阅org.hibernate.dialect.SQLServerDialect.supportsLimit().getLimitString()),因此您将获得select top 1 - 查询。

如果您希望绝对确定,可以启用调试日志记录,或启用showSql - 选项并进行测试。

答案 1 :(得分:0)

可能会有以下代码片段的帮助。假设我们有一个托管Bean类EmpBean,我们只需要前5条记录。以下是代码

public List<EmpBean> getData()
{
    Session session = null;
    try
    {
        session = HibernateUtil.getSession();
        Query qry = session.createQuery("FROM EmpBean");
        qry.setMaxResults(5);
        return qry.list();
    }
    catch(HibernateException e)
    {}
    finally
    {           
        HibernateUtil.closeSession(session);
    }
    return null;
}

这里getSession和closeSession是静态实用程序方法,它们将负责创建和关闭会话