W Jpa domyślne jest tak:
Many to one - EAGER
One to one - EAGER
Many to many - LAZY
One to many - LAZY
Polecam domyślnie korzystać z lazy. dlaczego? Ponieważ założmy że mamy taką sytuację - potrzebujmy tylko kilka danych na temat przedmiotu więc wysyłamy zapytanie do bazy danych o klasę Product. Załóżmy że klasa product jest poważana z klasą Discount, Category, Brand, ProductAdvertisement itd.
Jeżeli wszędzie masz ustawione EAGER a potrzebujesz pobrać tylko klasę Product podczas jednek transakcji pobierzesz dodatkowo wszystkie inne klasy. Tak więc zamiast wysłać jedno zapytanie do bazy danych wyślesz tych zapytań kilka. Mało tego, załóżmy, że np klasa Brand reprezentująca markę produktu zawiera inne relacje z klasami np: BrandAddress, BrandOpinions, BrandRatings itd. Jeżeli wszędzie masz ustawione EAGER wysyłasz kolejne bezsensowne zapytania.
A ty przecież chciałeś tylko pobrać jedną klasę o nazwie Product, a wysłałeś w tym momencie 20 zapytań do bazy danych.
- raz że cierpi na tym wydajność, bo zrobiłeś 20 zapytań zamiast jednego
- dwa - cierpi na tym pamięć, bo pobrałeś nieistotne dla aplikacji dane, które zajmują miejsce w pamięci.
Dlatego domyślnie wszędzie ustawiaj Lazy, a jeżeli chcesz koniecznie pobierać kilka rzeczy naraz to zrób sobie specjalne zapytania, możesz też użyć
możesz użyć adnotacji
Kopiuj
@NamedEntityGraph oraz @EntityGraph
która załaduje ci daną relacje typu OneToMany albo ManyToMany na życzenie.