Popraw mnie, jeśli coś jest nie tak.DAO, wiosna i hibernacja
Teraz, gdy używamy Spring DAO dla szablonów ORM, gdy używamy atrybutu @Transactional, , nie mamy kontroli nad transakcją i/lub sesją, gdy metoda jest wywoływana zewnętrznie, a nie w ramach metody.
Leniwe ładowanie zapisuje zasoby - mniej zapytań do db, mniej pamięci, aby wszystkie kolekcje zostały pobrane w pamięci aplikacji.
Tak więc, jeśli leniwy = fałsz, to wszystko jest pobierane, wszystkie powiązane zbiory, które nie są efektywne, jeśli w połączonym zestawie znajduje się 10 000 rekordów.
Mam teraz metodę w klasie DAO, która ma zwrócić mi obiekt User. Ma kolekcje reprezentujące połączone tabele bazy danych. Potrzebuję uzyskać obiekt według id, a następnie zapytać o jego kolekcje.
Hibernacja "nie udało się leniwie zainicjować kolekcji" pojawia się, gdy próbuję uzyskać dostęp do połączonej kolekcji, którą zwraca ta metoda DAO.
Proszę wyjaśnić, co to jest obejście?
Aktualizacja: Dobra, pozwól, że cię o to zapytam. DAO jest warstwą abstrakcyjną, więc metoda "getUserById (Integer id)" ma zwrócić obiekt.
Co jeśli w niektórych przypadkach potrzebuję tych powiązanych kolekcji obiektu użytkownika, aw innych sytuacjach potrzebuję tych kolekcji.
Czy istnieją tylko dwa sposoby: 1) lazy loading = false 2) tworzenie różnych metod: getUserByIdWithTheseCollections() getUserByIdWithOtherCollections() i wewnątrz tych metod wykorzystywać swoje podejście?
Mam na myśli, czy istnieją tylko 2 sposoby i nic lepszego?
Aktualizacja 2: Wyjaśnij proszę, co dałoby mi wyraźne użycie SESSIONFACTORY? Jak to wygląda w praktyce? Tworzymy instancję obiektu DAO, , a następnie wprowadzamy do niej fabrykę sesji, co oznaczałoby, że dwa kolejne wywołania metody do DAO będą wykonywane w ramach tej samej transakcji? Wydaje mi się, że tak czy inaczej DAO jest odseparowany od klas, które z niego korzystają!
Logika i transakcje są zawarte w DAO, prawda?
@Konrad Garus Proszę zobaczyć mój dopisek pytania, tutaj tekst jest mniej czytelny, więc proszę Cię tam. – EugeneP
@EugeneP Zobacz zaktualizowaną odpowiedź. –