2012-03-21 11 views

Odpowiedz

19

Tak.

Atrybut mówi hibernacji , gdy, aby uzyskać dzieci. Atrybut

Atrybut fetch mówi hibernacji , jak, aby uzyskać dzieci.

Kiedy mówisz

Leniwy = true atrybut jest umożliwienie leniwy załadunku rodzica i dziecka kolekcji i samego pobrania = „select” atrybut

że jest płaska się błędne. Wybrana strategia pobierania to NIE to samo, co wyłączanie leniwego ładowania. W rzeczywistości, from the documentation

Wybierz Pobieranie: drugi SELECT służy do pobierania powiązanych podmiot lub kolekcji. O ile nie wyłączysz jawnie leniwego pobierania przez , określając leniwy = "fałsz", to drugie wybieranie zostanie wykonane tylko po uzyskaniu dostępu do powiązania, gdy uzyskasz .

+0

Dziękuję. Mam inną wątpliwość, gdy odczytuję różnicę w wartościach pobranych przy pobieraniu Proxy lub "Nie-proxy", które są nazywane wartościami jednorazowymi. Co to jest asocjacja o jednej wartości w stanie hibernacji? – user1127214

12

Kiedy mówimy fetch="select", to zawsze będzie uruchamiać oddzielne zapytania, aby pobrać obiekty skojarzeń, nawet jeśli jest to lazy ="false".

Ale kiedy mówimy lazy ="true", oznacza to, że pobierze obiekty skojarzenia w osobnej kwerendzie, ale nie w momencie ładowania obiektu, ale gdy połączenie zostanie po raz pierwszy udostępnione. Możemy to zrobić, mówiąc: list().size().

Kiedy mówimy fetch="join", zawsze wystrzeli ono pojedynczą kwerendę, aby uzyskać skojarzenie obiektów z bazy danych.

0

Aby rozwiązać problem n + 1, wybierz problem dla zapytań n (relacja parent parent) w hibernacji używamy fetch = "join" zamiast fetch = "select". Ustawienie leniwy decyduje, czy załadować obiekty podrzędne podczas ładowania obiektu nadrzędnego. Musisz to zrobić, odpowiedni plik odwzorowania hibernacji w klasie nadrzędnej.Lazy = true (znaczy, aby nie ładować elementu podrzędnego) Domyślnie leniwy ładunek obiektów podrzędnych jest prawdziwy .

Powiązane problemy