7

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

采取以下简单的场景。

如果我有一个返回 100 行的查询并且如果我将 1 传递给setMaxResults,这会影响从 SQL 服务器本身返回的结果(就像运行一条select top 1语句一样)还是 Hibernate 首先获取所有结果(在这种情况下为所有 100 行)并选择最上面的那个?

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

谢谢你。

4

2 回答 2

4

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

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

于 2013-02-28T08:25:44.950 回答
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 是静态实用程序方法,它们将负责创建和关闭会话

于 2013-02-28T08:08:34.683 回答