Widziałem kilka podobnych pytań z 0 dobrymi odpowiedziami.JPA chce załadować kolekcje FetchType.LAZY
To powinno być bardzo proste. Używam Java JPA i chcę ładować listę elementów podrzędnych czasami, ale nie cały czas. Niestety, JPA nie wydaje się mnie słuchać, kiedy mówię, żeby leniwie go sprowadzić. W 100% upewniłem się, że w moim kodzie nie ma nigdzie żadnego atrybutu childEntities. Jednak wszystkie elementy podrzędne wciąż są ładowane natychmiast po wywołaniu funkcji JPA.em(). Find (..). Tak deklaruję związek z adnotacjami.
@Entity
@Table(name = "parentEntities")
public class ParentEntity implements Serializable {
....
@OneToMany(mappedBy = "entityPropertyName", fetch = FetchType.LAZY)
public List<ChildEntity> childEntities;
...
}
I to jest jak załadować podmiot nadrzędny:
ParentEntity parentEntity = JPA.em().find(ParentEntity.class, id);
Dodatkowo, miałem nadzieję, że czasami chętni pobrać tę kolekcję i być w stanie dynamicznie powiedzieć JPA kiedy to zrobić. Ale to jest krok 2. Krok 1 to po prostu to działa.
Jak się weryfikacji, że to naciągane? Czy istnieje możliwość ustawienia odwzorowań orm.xml lub innych mapowań miejsc lub detektorów jednostek, które zastępują ustawienie leniwy lub uruchamiają kolekcję? Z jakiego operatora korzystasz? – Chris
W debugerze widzę zaraz po wywołaniu wyszukiwania, że lista jest wypełniona. Nie używam żadnego XML-a do konfiguracji, tylko adnotacje. –
Na razie stworzyłem niezwykle nadęty i hacky rozwiązanie. Stworzyłem dwie jednostki nadrzędne, jedną z kolekcją listy podrzędnej i jedną bez. Niestety, ten hack (tak jak wiele hacków) powoduje kaskadę brudu do reszty mojego kodu. –