JPA pytanie o selecty

0

Witam,
mam trzy klasy odzwierciedlajace relacje w bazie danych

class Pracownik{
String imie;
@ManyToOne(fetch = FetchType.EAGER)
Stanowisko stanowisko;
}

class Stanowisko{
String nazwa;
@ManyToOne(fetch = FetchType.EAGER)
Zarobki zarobki;
}

class Zarobki{
BigDecimal wartosc;
}

Teraz pobierając sobie obiekt Pracownik idzie zapytanie które wydobywa pracownik ze stanowiskiem oraz stanowisko z zarobkami. Czy można jakoś ograniczyć takie rzeczy w Hibernate jest max_fetch_depth a w czystym JPA

Pozdrawiam

0

Chodzi mi ot aby podczas pobierania pracownika pobrało mi się tylko stanowisko bez zarobkow.

0

Musisz to zrobic zapytaniem np select p from Person.

0

Teraz pobierając sobie obiekt Pracownik idzie zapytanie które wydobywa pracownik ze stanowiskiem oraz stanowisko z zarobkami.

Dzieje się tak, ponieważ ustawiasz:

fetch = FetchType.EAGER

Powinieneś ustawić na FetchType.LAZY (które jest wartością domyślną parametru fetch) jeżeli chcesz, żeby powiązane rekordy były wyciągane z bazy "leniwie", czyli dopiero, kiedy zajdzie faktyczna potrzeba dostępu do np. zarobków albo stanowiska pracownika. Jest to dobra praktyka, jednak nieumiejętnie wykorzystywana prowadzi do LazyInitializationException. Jak chcesz wiedzieć więcej, to pytaj. Polecam framework JBoss Seam który jest lekiem na wszelkie zło, również na LazyInitializationException ;). Pozdrawiam.

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