2012-06-12 4 views
5

Utilizzando l'EntityManager JPA e l'oggetto Query JPA, come posso eseguire l'override di qualcosa che ha l'annotazione @OneToMany (fetch = FetchType.EAGER) da recuperare pigramente in una query?Come eseguire l'override di FetchType.EAGER per essere pigri in fase di esecuzione

Se avessi l'oggetto Query di ibernazione, potrei farlo creare un oggetto criteri e, usando questo, impostare il tipo di recupero come pigro. Ma devo usare l'oggetto Query JPA. c'è qualche soluzione per questo problema?

+0

Sì, puoi: http://stackoverflow.com/questions/4388486/fetchmode-in-jpa-2-criteriaquery –

+0

Vedi questo: http: //stackoverflow.com/questions/17847289/ignore-a-fetchtype-eager-in-a-relationship. – Dherik

risposta

4

Non c'è modo di farlo, anche con l'API Hibernate nativa. Se un'associazione è definita come EAGER, sarà sempre caricata con entusiasmo e non è possibile modificarla utilizzando una query.

Il contrario non è vero: è possibile caricare con impazienza un'associazione lazy utilizzando una query.

+0

Accidenti. Grazie, sì, ho usato la parola chiave fetch in HQL per farlo. – hugelgupf

-1

Cerca nei profili di recupero in ibernazione o nei grafici di entità JPA. Questo problema è stato risolto da quando hai posto la domanda nel 2012.

+0

Questo non è stato risolto Vedi: https://hibernate.atlassian.net/browse/HHH-8776 - non è possibile ignorare il carico EAGER anche utilizzando EntityGraphs. –

+0

Ah, mi scuso, trascuro la mia risposta. Il tipico caso d'uso è il contrario: contrassegna le tue entità come pigramente recuperate e usa il grafico delle entità per cambiare il tipo di recupero in modo che sia impaziente in fase di esecuzione. Non ero a conoscenza di HHH-8776, buono a sapersi, grazie. – mancini0

Problemi correlati