Correggimi se questo è un duplicato esatto, so che questo argomento viene discusso spesso ma non riesco a trovare una risposta definitiva.MVC con caricamento lento
La domanda:
Qual è la migliore soluzione pratica per la manipolazione di oggetti Hibernate in una webapp MVC?
I dettagli:
Sto usando Hibernate e voglio sfruttare lazy loading, ove possibile.
Sto lavorando in una webapp in stile MVC.
Odio ricevere le eccezioni di inizializzazione del carico pigro.
Detesto dover ricollegare gli oggetti Hibernate tra le transazioni.
Le opzioni:
- carico Eager tutto
- risolve il problema di inizializzazione pigra, ma rende le mie domande più grande
- usare un po 'Open Session View' concetto
- Mi piace la sua semplicità
- oggetti devono ancora essere riattaccato, e in una configurazione AJAXy, abbastanza frequentemente
- si apre una sessione per ogni richiesta
- articoli 'touch' ho bisogno prima di lasciare la transazione
- Sembra fragile a meglio .. e noioso
- Crea diversi oggetti, semplificate, villino quindi la vista non vede mai reale Hibernate oggetti
- Th ese potrebbe essere più semplice di oggetti pieni Hibernate quindi non è come un carico desiderosi completa del modello
- ho sentito questa consigliato in luoghi a, ma sembra proprio come più responsabilità/code/lavoro
- Aprire una sessione quando mai voglio interagire con gli oggetti di Hibernate.
- Questo può essere racchiuso in un livello Spring Service piuttosto bene, ma a volte sembra eccessivo. Ad esempio: Voglio
hibernateObject.getRelatedObjects()
ma bisogno di dire qualcosa di similespringService.getRelatedObjects(hibernateObject)
- Questo può essere racchiuso in un livello Spring Service piuttosto bene, ma a volte sembra eccessivo. Ad esempio: Voglio
mi sto perdendo qualcosa?
Ho pensato troppo alle cose?
Ho sottovalutato le cose?
PS:
Per un framework web che sto utilizzando ZK ma non vuole veramente una risposta specifica ZK.
Anche io sto usando Spring e sono cool con una risposta specifica di Spring perché è così onnipresente.
Acclamazioni Bedwyr, penso che mi prendo questo approccio. È un po 'più codice, ma la separazione tra vista e modello dovrebbe valerne la pena. –
Sono d'accordo con questa risposta e lo ho svalutato, voglio solo aggiungere un pezzo di codice che potresti trovare utile. Ecco una copiatrice a profondità variabile, dipende da Spring ma è più leggera di una soluzione di mappatura completa come Dozer. https://gist.github.com/thinkbigthings/5488327 – Jay
Anche qui c'è un unproxer Hibernate: https: // gist.github.com/thinkbigthings/5141813 – Jay