2010-02-08 15 views
18

Sto scrivendo una query su un modello di dominio in cui (per qualsiasi motivo) un'associazione uno-a-molti viene mappata con lazy = "false". Nella mia particolare domanda, preferisco prendere quella raccolta pigramente, perché non mi interessa il suo contenuto. Come posso riattivare la pigrizia per la mia particolare richiesta? Ciò è effettivamente possibile?Hibernate: abilitazione del recupero pigro nell'API criteri

Finora, ho guardato Criteria.setFetchMode, ma è solo FetchMode.LAZY deprecated FetchMode.SELECT ...

Modifica della mappatura probabilmente sarebbe l'ideale, ma preferisco non rischio che influiscono sul query esistenti.

Edit: Usiamo Hibernate 3.3.2

risposta

-6

io non sono un esperto di me stesso, ma la navigazione attraverso il libro Hibernate e di consulenza con un collega non mi ha dato alcun suggerimento che questo sarebbe possibile, piuttosto il contrario .

La tua sembra essere una situazione insolita, non coperta da Hibernate. Il caso d'uso tipico è il contrario: utilizzare il recupero pigro per impostazione predefinita e abilitare selettivamente il richiamo ansioso per le query laddove è giustificato.

+0

non ho trovato niente. Sembra che uno non devia dalle impostazioni predefinite di ibernazione. Ho lavorato al problema proiettando. (Non avevo bisogno delle intere entità, anche se preferirei evitare di definire un nuovo DTO). – meriton

+3

vedi la mia risposta, setFetchMode ha funzionato. –

4

Nel caso in cui qualcuno inciampi (come me), fare riferimento a this. Sembra che si trattasse di un errore di documentazione di Hibernate e FetchMode.SELECT causa un carico lento.

25

La risposta accettata è errata. Hibernate ti permette di recuperare pigro in base a criteri che di solito sono desiderosi di mappare. Basta chiamare il numero

criteria.setFetchMode("propertyName", FetchMode.SELECT); 

Ho provato questo e ha funzionato. FetchMode.LAZY è segnato deprecato nel codice sorgente, e tutto ciò che fa è puntare a FetchMode.SELECT

codice

Hibernate:

public static final FetchMode LAZY = SELECT; 
+1

Questo ha funzionato per me: stavo usando Criteria.DISTINCT_ROOT_ENTITY con setFirstResult e setMaxResults e ottenendo troppi risultati. – blank

+2

@Che javara - ho appena provato questo e non funziona per me. Sto usando Hibernate 3.6.10. Ho cercato il codice per gli usi e nessuno sembrava essere un caso di Hibernate che saltasse il caricamento di una raccolta/associazione. Hai qualche suggerimento su dove cercare? – mikemil

+0

Non ha funzionato per me con l'ibernazione 4.0.5 – nxhoaf

Problemi correlati