Left join fetch z warunkiem

Left join fetch z warunkiem
NO
  • Rejestracja:ponad 2 lata
  • Ostatnio:5 dni
  • Postów:135
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:

Kopiuj
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:

Kopiuj
@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:

Kopiuj
org.hibernate.hql.internal.ast.QuerySyntaxException: with-clause not allowed on fetched associations; use filters
AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
0

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


Bo C to najlepszy język, każdy uczeń ci to powie
edytowany 1x, ostatnio: Riddle
KA
  • Rejestracja:ponad 5 lat
  • Ostatnio:12 minut
  • Postów:57
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:

Kopiuj
@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.

edytowany 1x, ostatnio: Karaczan
NO
  • Rejestracja:ponad 2 lata
  • Ostatnio:5 dni
  • Postów:135
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

edytowany 1x, ostatnio: Riddle
NO
  • Rejestracja:ponad 2 lata
  • Ostatnio:5 dni
  • Postów:135
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:

Kopiuj
@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

KA
  • Rejestracja:ponad 5 lat
  • Ostatnio:12 minut
  • Postów:57
0

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

edytowany 1x, ostatnio: Riddle
RequiredNickname
  • Rejestracja:prawie 5 lat
  • Ostatnio:dzień
  • Postów:620
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...

NO
  • Rejestracja:ponad 2 lata
  • Ostatnio:5 dni
  • Postów:135
0

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

ZI
  • Rejestracja:ponad 8 lat
  • Ostatnio:3 dni
  • Postów:230
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

AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
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.


Bo C to najlepszy język, każdy uczeń ci to powie
edytowany 1x, ostatnio: AnyKtokolwiek

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.