Correggimi se qualcosa non va.DAO, Spring and Hibernate
Ora, quando utilizziamo Spring DAO per i modelli ORM, quando usiamo l'attributo @Transactional, , non abbiamo il controllo sulla transazione e/o sulla sessione quando il metodo è chiamato esternamente, non all'interno del metodo.
Il caricamento lento consente di risparmiare risorse: meno query al db, meno memoria per mantenere tutte le raccolte recuperate nella memoria dell'app.
Quindi, se lazy = false, quindi viene recuperato tutto, tutte le raccolte associate, che non è efficace, se ci sono 10.000 record in un set collegato.
Ora, ho un metodo in una classe DAO che dovrebbe restituirmi un oggetto Utente. Dispone di raccolte che rappresentano tabelle collegate del database. Ho bisogno di ottenere un oggetto da id e quindi interrogare le sue collezioni.
Hibernate "l'inizializzazione fallita per inizializzare una raccolta in modo lento" si verifica quando si tenta di accedere alla raccolta collegata restituita da questo metodo DAO.
Spiegare per favore, che cosa è una soluzione qui?
Aggiornamento: Va bene, lascia che ti chieda questo. DAO è un livello astratto, quindi un metodo "getUserById (Integer id)" dovrebbe restituire un oggetto.
Cosa succede se in alcuni casi ho bisogno di queste raccolte collegate dell'oggetto Utente e in altre situazioni ho bisogno di quelle raccolte.
ci sono solo due modi: 1) lazy loading = false 2) creare diversi metodi: getUserByIdWithTheseCollections(), getUserByIdWithOtherCollections() e all'interno di questi metodi usare il tuo approccio?
Voglio dire, ci sono solo 2 modi e niente di meglio?
Aggiornamento 2: Spiegare per favore, cosa mi darebbe l'uso esplicito di SESSIONFACTORY? Come appare in pratica? Creiamo un'istanza dell'oggetto DAO, , quindi l'inseriamo con la sessione di produzione e questo significherebbe che due chiamate di metodo consecutive a DAO verranno eseguite all'interno della stessa transazione? Mi sembra comunque che DAO sia distaccato dalle classi che ne fanno uso!
La logica e le transazioni sono incapsulate all'interno di DAO, giusto?
@Konrad Garus Si prega di vedere il mio poscritto della domanda, qui il testo è meno leggibile, quindi vi chiedo lì. – EugeneP
@EugeneP Vedi risposta aggiornata. –