Left join fetch z warunkiem

0

Mam 2 encje JPA w relacji one-to-many - Seat i Booking. Chciałbym pobrać Seat po id z Bookings ze statusem "ACTIVE'. Jeśli Booking nie miałby takich Seats to powinno zostać zwrócone Seat z pustą listą Bookings.

Takie query działa w konsoli do SQL:

select * from seats s left join bookings b on b.seat_id=s.id and b.status='ACTIVE' where s.id=1

Przerobiłem je na query do Spring Data JPA:

@query("select s from Seat s left join fetch s.bookings b on b.seat.id=s.id and b.status='ACTIVE' where s.id = :seatId")

Ale dostaję taki błąd:

org.hibernate.hql.internal.ast.QuerySyntaxException: with-clause not allowed on fetched associations; use filters
0

Google dość obszernie naświetla ten wyjątek. A @Query pozwolę sobie wątpić, czy należy do Spring Data JPA.

0

Ten fragment wygląda na zbędny: on b.seat.id=s.id and, bo JPA samo złączy sobie encje na podstawie tego jak je zadeklarowałeś.
Jeżeli dobrze rozumiem to chcesz napisać coś takiego:

@query("select s from Seat s left join fetch s.bookings b where b.status='ACTIVE' and s.id = :seatId")

Tak btw status też można przekazać jako parametr.

0
AnyKtokolwiek napisał(a):

Google dość obszernie naświetla ten wyjątek. A @Query pozwolę sobie wątpić, czy należy do Spring Data JPA.

@AnyKtokolwiek: Uwierz mi, że szukałem w Google

1
Karaczan napisał(a):

Ten fragment wygląda na zbędny: on b.seat.id=s.id and, bo JPA samo złączy sobie encje na podstawie tego jak je zadeklarowałeś.
Jeżeli dobrze rozumiem to chcesz napisać coś takiego:

@query("select s from Seat s left join fetch s.bookings b where b.status='ACTIVE' and s.id = :seatId")

Tak btw status też można przekazać jako parametr.

Jeśli nie ma żadnych Booking ze statusem "ACTIVE" (są same z "CANCELLED") to twoje query zwraca nulla zamiast Seat z pustą listą Bookings

0

To daj: (b is null or b.status = :status) albo olej JPA, bo to straszna kaszanka

0

kolega nie oleje JPA bo obrał sobie za punkt honoru przejść ścieżkę zdrowia jaką przechodzili nasi dziadowie i na własnej skórze chce się przekonać jak to jest błahe problemy do rozwiązania w innych, nowocześniejszych technologiach / podejściach rozwiązywać w JPA. No offense...

0

@RequiredNickname: JPA jest wymagane w większości ofert pracy a mam za mało doświadczenia, żeby wybrzydzać

0

To ze jest wymagany nie znaczy ze robi sie tym wszystko. Dobierasz narzedzie do problemu a nie masz mlotek i probujesz tym naprawiac elektonike

0
Nofenak napisał(a):

@RequiredNickname: JPA jest wymagane w większości ofert pracy a mam za mało doświadczenia, żeby wybrzydzać

To jest przerażające.
Wpisywanie się w listę najpopulartniejszych technologii, ale na poziomie "widziałem przez ramię i nie rozumiem głębiej"
Jutro startujesz w rekrutacji?

Ziemiak napisał(a):

To ze jest wymagany nie znaczy ze robi sie tym wszystko. Dobierasz narzedzie do problemu a nie masz mlotek i probujesz tym naprawiac elektonike

Co wiecej, poznanie (rzeczywiscie adekwatnej tutaj) np coś w rodzaju JDBI rozszerzy horyzont myślowy, nawet jakby kiedyś zawodowo wylądować z JPA

Nofenak napisał(a):
AnyKtokolwiek napisał(a):

Google dość obszernie naświetla ten wyjątek. A @Query pozwolę sobie wątpić, czy należy do Spring Data JPA.

@AnyKtokolwiek: Uwierz mi, że szukałem w Google

Dziwne, wystarczyło poczytać, ze 3-4 scenariusze złego napisania kweredny JPQL to dają, zobaczyć do którego mój problem jest podobny
Na pierwszym ekranie googla sa wszystkie.
Disclaimer: nie da się bez zrozumienia.

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