Il sito dedicato all'informatica ideato da Iasparra Francesco

Hibernate: migliorare le prestazioni di una query

  • Risparmiare memoria quando il risultato di una query contiene parecchi records.

  • Data: 12/06/2007 Autore: Iasparra Francesco 

In questo semplice esempio sono riportati due modalita' per ottenere il risultato di una query utilizzando HQL di Hibernate. Nel primo metodo si fa uso dell'oggetto ScrollableResults che ha alcuni vantaggi rispetto al metodo ".list()" della createQuery, esso infatti permette di risparmiare memoria.

Integer size=0;
Session sessionH=null;
try {
    sessionH = HibernateSessionFactory.currentSession(null);
    Query crit=null;
    List records=null;
    crit=sessionH.createQuery("FROM ec_articolo");

        // METODO MIGLIORE
        // SI OTTIENE IL NUMERO DI ELEMENTI SENZA ALLOCARILI IN MEMORIA
        // GLI ELEMENTO SONO ALLOCATI SOLO SE RICHIESTI CON IL METODO GET

        System.out.println("***SCROLL***");
        ScrollableResults scr = crit.scroll();
        scr.last();
        size=scr.getRowNumber();
        /*
        scr.first();
        while (true) {
            ec_articolo art=(ec_articolo) scr.get(0);
            if (!scr.next())break;
        }*/


        // METODO SCONSIGLIATO I RECORD SONO TUTTI ALLOCATI IN MEMORIA
        System.out.println("***LIST***");
        records=crit.list();
        size=records.size();
        /*
        for (int i=0;i<size;i++){            ec_articolo art=(ec_articolo) records.get(i);
        }*/

} catch (Exception e){
    System.out.println(e.toString());
}    

  • Java

  • Php

  • Mysql

  • Apache ant

  • Eclipse

  • Spring

  • Hibernate

  • Netbeans

  • Debian

  • Linux

  • Maven