2013-02-28 57 views
5

我正在使用MS SQL Server 2008和Hibernate。我的问题是进入休眠模式如何实现setMaxResultsHibernate中的setMaxResults(N)如何工作?

看看下面的简单场景。

如果我有一个返回100行,如果我通过1到setMaxResults,这会不会影响从SQL Server本身返回的结果(好像运行select top 1语句)或不休眠首先获得所有结果(所有查询在这种情况下为100行),并选择最上面的一个呢?

原因,我问的是,这将产生巨大的性能问题时的行数开始增长。

谢谢。

回答

3

的Hibernate会产生一个极限式的查询,用于支持限制查询所有方言。由于SQLServerDialect支持此功能(请参阅org.hibernate.dialect.SQLServerDialect.supportsLimit().getLimitString()),您将获得一个select top 1查询。

如果你想成为是绝对肯定的是,你可以打开调试日志记录,或启用showSql - 选项和测试。

+0

谢谢,多数民众赞成我正在寻找。事情是,我检查了调试输出,它确实使用'select top 1'。 – user624558 2013-02-28 23:25:40

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是静态实用方法,这将照顾创建和关闭会话

+0

感谢您的答复,但我一直在寻找如何'setMaxResults'是scene.Got后面实现从@AleksanderBlomskøld的答复答案的解释。 – user624558 2013-02-28 23:28:15

相关问题