Domanda

Ogni libro può avere molti autori. E ogni autore può all'autore molti libri.

class Book {
   static belongsTo = Author
   static hasMany = [authors:Author]
}

class Author {
   static hasMany = [books:Book]
}

Ora, quando posso fare:

def book = Book.get(id)
def authors = book.authors

Ora sto pensando che dovrei essere in grado di prendere ogni autore e ottenere i libri che è associato con:

authors.each {
   it.books
}

Si vede ora otterrebbe ricorsiva (che porta a StackOverflow). Qualcuno sa come funziona esattamente, quando si sta facendo ansioso fetch?

È stato utile?

Soluzione

Che si tratti di entusiasmo o pigramente caricato, una volta un'istanza Hibernate gestiti viene caricato è tenuto in Hibernate Session, che è la cache di 1 ° livello (se si è anche configurato una cache di 2 ° livello, allora le istanze saranno anche lì e potrebbe provenire da lì, se sono stati precedentemente caricati).

Quindi, dopo aver caricato il libro, e poi aver caricato la sua collezione autore (un insieme di default), il libro di ogni autore è già nella sessione, quindi non c'è bisogno di andare al database.

Ardentemente il caricamento di una collezione mappata utilizza il ResultSet iniziale per afferrare l'istanza di livello superiore, più le istanze bambino in una query di database. Pigramente caricare la raccolta richiede solo una query di database secondo per popolare la raccolta, ma ha il vantaggio di un solo caricamento della collezione, se necessario.

Altri suggerimenti

Per maggiore chiarezza si può fare riferimento al blog scritto da Burt Beckwith a http: // burtbeckwith. com / blog /? p = 169 e si può anche passare attraverso la presentazione link indicato nel blog.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top