web-dev-qa-db-fra.com

HQL ERROR: chemin attendu pour la jointure

Je continue à essayer des variantes de cette requête et n'arrive pas à y arriver. J'ai également référencé ce post: chemin attendu pour Join! Nhibernate Error et ne semble pas pouvoir appliquer la même logique à ma requête. Mon objet User a une collection UserGroup.

Je comprends que la requête doit référencer des entités dans l'objet, mais d'après ce que je vois, je suis ...

@NamedQuery(
  name = "User.findByGroupId",
  query =
    "SELECT u FROM UserGroup ug " +
    "INNER JOIN User u WHERE ug.group_id = :groupId ORDER BY u.lastname"
)
90
Webnet
select u from UserGroup ug inner join ug.user u 
where ug.group_id = :groupId 
order by u.lastname

En tant que requête nommée:

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

Utilisez les chemins dans l’instruction HQL, d’une entité à l’autre. Voir le documentation Hibernate sur HQL et les jointures pour plus de détails.

120
JB Nizet

Vous devez nommer l'entité qui détient l'association en tant qu'utilisateur. Par exemple,

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

C'est le "chemin" dont le message d'erreur se plaint - chemin de UserGroup à l'entité User.

Hibernate s'appuie sur des JOIN déclaratifs, pour lesquels la condition de jointure est déclarée dans les métadonnées de mappage. C'est pourquoi il est impossible de construire la requête SQL native sans avoir le chemin.

57
Marko Topolnik