Wpis z mikrobloga

#java #spring #hibernate

Mirki, mam pewien problem z Hibernate. Mam przykładową klasę @Entity:

@Entity

public class Sample{
int id;
String field1;
@ElementCollection
Set items = new HashSet<>();
}

Podczas uruchamiania, hibernate tworzy mi automatycznie nowa tabelę: SAMPLEITEMS z kolumnami: SAMPLEID i ITEMS. Dzięki czemu dla jednej wartości Sample mogę mieć wiele elementów zbioru items - połączonych za pomocą sampleid.
Mam problem z wymyśleniem customowej query, która mi będzie wyszukiwać podany "items" w tabeli SAMPLE
ITEMS i pobierać dla niego dane z tabeli SAMPLE (Za pomocą sampleid). Mając już bazę ,można to łatwo zrobić za pomocą left joina, ale w HQLu - tak jakby nie wykrywało mi tej "tworzonej przy starcie" tabeli.
Próbowałem użyć takiej @Query:

@Query("SELECT sp from Sample sp left join sp.items as it where
it.id = sp.id ....)

no i działa, tylko że jako sp.id - bierze dane z kolumny "items" w SAMPLE
ITEMS. A ja chcę żeby brało z SAMPLEID.

Próbowałem
@Query("SELECT sp from Sample sp left join sp.items as it where
it.sample_id = sp.id ....)
, ale leci wtedy Exception: QueryException: cannot dereference scalar collection element: sampleid.

Macie pomysł jak zjoinowac te tabele po SAMPLE
ID?
  • 3
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@mariusz-laszczka: albo nie do końca rozumiem, albo nie możesz zapisać po prostu:

SELECT sp from Sample sp join sp.items as it where it = :parametrDoWyszukania
?
Nie do końca rozumiem te Twoje zapisy typu it.id = sp.id, to nie jest sql, nie musisz definiować po czym robisz joina, hql bazuje na obiektach
  • Odpowiedz