Wątek przeniesiony 2017-12-14 15:50 z Kariera przez somekind.

Problem z JSONem i FetchType.Lazy

0

Jak sobie poradzić z takim błędem Lazy initiation exception? JSON wypluwa wszystkie dane, nawet te które w tym momencie nie są mi potrzebne.

Np. chce pobrać historię wypożyczeń książek użytkownika. To dostanę odpowiedź coś w stylu

{
    "idWypozyczenia": 1,
    "użytkownik": {
                             "idUzytkownika":1,
                             "imie":"jasio",
                             "grupa": {
                                              "idGrupy":1,
                                              "nazwa":"pracownicy"
                                           }
                          }
}

I teraz ta grupa mi nie jest do szczęścia potrzebna. Więc nie chce jej inicjować, ale wywala mi błąd że nie została zainicjowana.
Mógłbym dać @JsonIgnore przy "grupa" w encji uzytkkownik, ale wtedy jak skorzystam z innego endpointa pobiore sobie samych użytkowników, to zignoruje mi też grupy, a wtedy akurat chciałbym je zobaczyć.

Jak sobie radzić z takim problemem? Oczywiście danych może być masakrycznie dużo, więc nie chce używać FetchType.Eager.

0

Jeżeli masz encje, a ją bezpośrednio wypychasz w endpointach i na encji masz adnotacje JSONowe i z tego co piszesz to przypadków użycia masz wiele to łamiesz SRP. Jeżeli chcesz zwrocić użytkownikowi tylko listę wypożyczeń to stwórz DTO (strukturę danych, która będzie wypychana w endpoincie) i na niej daj adnotacje JSONowe. Dodatkowo jeżeli nie chcesz z bazy wyciągać niepotrzebnych danych to możesz użyć w tym celu projekcji

0

W konfiguracji dołóż takiego beana:

@Bean
    public Module hibernate5Module() {
        return new Hibernate5Module();
    }
0

Nie wiem jak sobie wyobrażasz ładowanie Lazy w JSON. Przekażesz dane do klienta np. JS, tam zrobisz console.log(response.użytkownik.grupa.nazwa) i nie mając wcześniej grupa.nazwa nagle Hibernate do JS to wypchnie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1