2013-02-28 3 views
5

Ich benutze MS SQL Server 2008 mit Hibernate. Die Frage, die ich habe, ist, wie Hibernate implementiert setMaxResultsWie funktioniert setMaxResults (N) in Hibernate?

Nehmen Sie das folgende einfache Szenario.

Wenn ich eine Abfrage habe, die 100 Zeilen zurückgibt und wenn ich 1 an setMaxResults übergebe, beeinflusst dies das zurückgegebene Ergebnis vom SQL Server selbst (als würde eine select top 1 Anweisung ausgeführt) oder Hibernate alle Ergebnisse zuerst (alle 100 Zeilen in diesem Fall) und wählen Sie die oberste selbst aus?

Grund Ich frage ist, dass es ein großes Leistungsproblem haben würde, wenn die Anzahl der Zeilen zu wachsen beginnt.

Vielen Dank.

Antwort

3

Hibernate wird ein Limit-Typ-Abfrage für alle Dialekte erzeugen, die Grenze Abfrage unterstützt. Da SQLServerDialect dies unterstützt (siehe org.hibernate.dialect.SQLServerDialect.supportsLimit() und .getLimitString()), erhalten Sie eine select top 1-Abfrage.

Wenn Sie absolut sicher sein möchten, können Sie Debug-Logging aktivieren, oder aktivieren Sie showSql -Option und Test.

+0

Danke, das ist, was ich gesucht habe. Die Sache ist, habe ich die Debug-Ausgabe überprüft, es ist in der Tat mit 'Select Top 1 '. – user624558

0

Mai folgen Schnipsel wird helfen. Nehmen wir an, wir haben eine verwaltete Bean-Klasse EmpBean, und wir wollen nur die ersten 5 Datensätze. So ist nach dem Code

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; 
} 

Hier getSession und Close sind statische Hilfsmethoden, die darauf achten, wird die Erstellung und Abschlusssitzung

+0

Danke für die Antwort, aber ich war auf der Suche nach einer Erklärung, wie 'setMaxResults' hinter der Szene implementiert ist.Gehen Sie die Antwort von @Aleksander Blomskøld Antwort. – user624558

Verwandte Themen