The SmartWeb Project

11 novembre 2005

References fetching: eager vs. lazy

Precisiamo una volta per tutte cosa è il fetching dei riferimenti e gli effetti che produce...

Quando un BusinessObject fa riferimento ad un altro ed entrambi sono stati definiti come classi mappate da Hibernate allora abbiamo stabilito una mapping reference e quindi risulta possibile reperire gli oggetti associati attraverso l'apposita proprietà.

Sulla proprietà è possibile definire la modalità di fetching da seguire per reperire il o i riferimenti collegati:
  • se definiamo la proprietà lazy Hibernate non recupera subito i dati dalla tabella associata, ma aspetta che venga fatta una richiesta esplicita, evitando di leggere dati non necessari.
  • se definiamo la proprietà eager, o non lazy, Hibernate recupera i dati dalla tabella associata facendo una outer join ed evitando di eseguire una seconda query.

Per default i riferimenti sono definiti come eager, quindi lazy="false", per evitare le eccezioni di tipo LazyInitializationException.

Visto il comportamento predefinito di Hibernate occorre esplicitare i riferimenti lazy altrimenti rischiate di andare a leggere ogni volta tutta la base dati... (momento di riflessione)

Rimando al sesto capitolo della documentazione di Hibernate per maggiori informazioni.
Siccome non lo cito mai, il tenero pedi i castagnaru ha approfondito il discorso insieme a me...

1 Comments:

  • Ottimo chiarimento su questa caratteristica di hibernate. Grazie.

    By Anonymous Anonimo, at 11:47 PM  

Posta un commento

<< Home