BŁĄD HQL: oczekiwana ścieżka do łączenia


100

Ciągle próbuję różnych odmian tego zapytania i nie wydaje mi się, aby tak się stało. Odwołałem się również do tego postu: Oczekiwana ścieżka do dołączenia! Nhibernate Error i nie mogę zastosować tej samej logiki do mojego zapytania. Mój Userobiekt ma UserGroupkolekcję.

Rozumiem, że zapytanie musi odwoływać się do jednostek w obiekcie, ale z tego, co widzę, jestem ...

@NamedQuery(
  name = "User.findByGroupId",
  query =
    "SELECT u FROM UserGroup ug " +
    "INNER JOIN User u WHERE ug.group_id = :groupId ORDER BY u.lastname"
)

Odpowiedzi:


131
select u from UserGroup ug inner join ug.user u 
where ug.group_id = :groupId 
order by u.lastname

Jako nazwane zapytanie:

@NamedQuery(
  name = "User.findByGroupId",
  query =
    "SELECT u FROM UserGroup ug " +
    "INNER JOIN ug.user u WHERE ug.group_id = :groupId ORDER BY u.lastname"
)

Użyj ścieżek w instrukcji HQL, od jednej jednostki do drugiej. Zobacz dokumentację Hibernate na temat HQL i złączeń, aby uzyskać szczegółowe informacje.


32
Co to jest „ścieżka”? Przeszukałem dokumentację HQL, ale nie znalazłem definicji.
gwg,

7
oznacza to, że musisz połączyć jednostki: w jego przykładzie powyżej zwróć uwagę, jak wstawił ug.user u. Bez ug.user przed nim wystąpiłby błąd. Również 'user' w 'ug.user u' powinno być nazwą pola w Class UserGroup!
Lawrence,

6
Ta składnia HQL jest denerwująca. Musiałem znaleźć wiele przykładów i znalazłem twoje.
Bằng Rikimaru,

Wtedy nie mogę „ręcznie” łączyć jednostek bez wyraźnego mapowania (pola, które ma zostać użyte do połączenia) zadeklarowanego z Entity?
Pan Anderson,

67

Musisz nazwać podmiot, który posiada powiązanie z użytkownikiem. Na przykład,

... INNER JOIN ug.user u ...

To jest „ścieżka”, na którą skarży się komunikat o błędzie - ścieżka z grupy użytkowników do jednostki użytkownika.

Hibernate opiera się na deklaratywnych połączeniach JOIN, dla których warunek łączenia jest zadeklarowany w metadanych odwzorowania. Z tego powodu nie można zbudować natywnego zapytania SQL bez posiadania ścieżki.


13
W końcu ktoś odpowiadający na temat źródła problemu ... (potrzeba przedrostka tabeli obcej istniejącym aliasem) rozwiązał mój problem, wielkie dzięki!
Saad Benbouzid

6
Co jeśli: nie utworzyłeś skojarzenia w jednostce i po prostu zapisałeś coś takiego jak „Long userId;”
Spektakulatius
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.