2012-05-14 16 views
6

ho una struttura come questa:Hibernate Query Language (HQL) - Richieste de pigro/carico non-lazy

  • A contiene collezione di B (mappata come non-pigro)
  • B contiene la raccolta di C (mappato come non-pigro)

Vorrei fare una query, che recupera un oggetto, che contiene oggetti B senza gli oggetti C al loro interno. È possibile? Il contrario funzionerà anche per me (se la relazione B-C è mappata pigra e la query recupera A, contenente B e C).

Grazie!

+0

Possibile duplicato di [Hibernate: Overriding di EAGER in HQL?] (Http://stackoverflow.com/questions/3072568/hibernate-overriding-mappings-eager-in-hql) – davidwebster48

risposta

5

No, non è possibile. Poiché hai contrassegnato l'associazione come caricata con entusiasmo, Hibernate caricherà sempre con entusiasmo questa associazione.

Se si contrassegna l'associazione come pigri (il valore predefinito per le associazioni pressi di molte), allora avete esimo possibilità di andarli a prendere con entusiasmo in una query, utilizzando un join fetch:

select a from A a left join fetch a.bs b left join fetch b.cs 

Si noti che questo non funzionerà se entrambe le collezioni sono borse (es. elenchi senza colonna indice).

+0

Ciao, grazie per la risposta. Ho trovato questo argomento troppo, la risposta è la stessa: http://stackoverflow.com/questions/3516873/hql-fetch-join-collections-from-eager-table ma sto avendo alcuni problemi a farlo funzionare Fine- moltiplica la "A" molte volte. Molto probabilmente il mio errore. – Mooncrosser

+0

Risolto il problema, è necessario "distinto" per farlo funzionare correttamente (non sono un esperto e non ho idea di quale sia la differenza). Contrassegnerò questo come risposta corretta, ma sarà bello se lo modifichi o indichi dove si trova la differenza :) – Mooncrosser

+1

Senza distinzione, Hibernate restituisce 1 risultato per riga del set di risultati JDBC. Ciò significa che se hai solo un A con 2 Bs e ogni B ha 2 C, la query restituirà 4 righe e l'elenco conterrà 4 volte la stessa istanza di A. La parola chiave distinta rende Hibernate rimuove i duplicati dall'elenco . –

Problemi correlati