HQL ERROR: Pfad für Join erwartet


100

Ich versuche immer wieder Variationen dieser Abfrage und kann dies scheinbar nicht bewirken. Ich habe auch auf diesen Beitrag verwiesen: Pfad für Beitritt erwartet! Nhibernate Error und kann anscheinend nicht dieselbe Logik auf meine Abfrage anwenden. Mein UserObjekt hat eine UserGroupSammlung.

Ich verstehe, dass die Abfrage Entitäten innerhalb des Objekts referenzieren muss, aber von dem, was ich sehe, bin ich ...

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

Antworten:


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

Als benannte Abfrage:

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

Verwenden Sie Pfade in der HQL-Anweisung von einer Entität zur anderen. Weitere Informationen finden Sie in der Hibernate-Dokumentation zu HQL und Joins .


32
Was ist ein "Weg"? Ich habe die HQL-Dokumentation durchsucht, aber keine Definition gefunden.
GWG

7
es bedeutet, dass Sie die Entitäten verknüpfen müssen: Beachten Sie in seinem Beispiel hier oben, wie er ug.user u setzt. Ohne das ug davor würde der Fehler angezeigt. Außerdem sollte der 'Benutzer' in 'ug.user u' der Name des Feldes in der Klasse UserGroup sein!
Lawrence

6
Diese HQL-Syntax ist ärgerlich. Ich musste viele Beispiele finden und fand deine.
Bằng Rikimaru

Dann kann ich Entitäten nicht "manuell" verbinden, ohne eine explizite Zuordnung (Feld, das zum Verbinden verwendet werden soll), die mit der Entität deklariert wurde.
Mr. Anderson

67

Sie müssen die Entität benennen, die die Zuordnung zum Benutzer enthält. Beispielsweise,

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

Das ist der "Pfad", über den sich die Fehlermeldung beschwert - Pfad von UserGroup zur User-Entität.

Der Ruhezustand basiert auf deklarativen JOINs, für die die Verknüpfungsbedingung in den Zuordnungsmetadaten deklariert ist. Aus diesem Grund ist es unmöglich, die native SQL-Abfrage ohne den Pfad zu erstellen.


13
Endlich hat jemand, der die Wurzel des Problems beantwortet hat (die Notwendigkeit, einer fremden Tabelle einen vorhandenen Alias ​​voranzustellen), mein Problem gelöst, vielen Dank!
Saad Benbouzid

6
Was ist, wenn: Sie keine Zuordnung in der Entität hergestellt und nur etwas wie "Lange Benutzer-ID" gespeichert haben?
Spektakulatius
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.