ERRORE HQL: percorso previsto per il join


100

Continuo a provare varianti di questa query e non riesco a farlo accadere. Ho anche fatto riferimento a questo post: Path Expected for Join! Nhibernate Error e non riesco ad applicare la stessa logica alla mia query. Il mio Useroggetto ha una UserGroupcollezione.

Capisco che la query deve fare riferimento a entità all'interno dell'oggetto, ma da quello che vedo sono ...

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

Risposte:


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

Come query con nome:

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

Usa i percorsi nell'istruzione HQL, da un'entità all'altra. Vedere la documentazione di Hibernate su HQL e join per i dettagli.


32
Cos'è un "percorso"? Ho cercato nella documentazione HQL ma non ho trovato una definizione.
gwg

7
significa che devi collegare le entità: nel suo esempio qui sopra, nota come mette ug.user u. Senza l'ug prima di esso si otterrebbe l'errore. Inoltre, "user" in "ug.user u" dovrebbe essere il nome del campo in Class UserGroup!
Lawrence

6
Questa sintassi HQL è fastidiosa. Ho dovuto trovare molti esempi e ho trovato il tuo.
Bằng Rikimaru

Quindi non posso unire "manualmente" entità senza mappatura esplicita (campo da utilizzare per unire) dichiarata con l'Entità?
Mr. Anderson

67

Devi nominare l'entità che detiene l'associazione a Utente. Per esempio,

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

Questo è il "percorso" di cui si lamenta il messaggio di errore: percorso da UserGroup all'entità utente.

Hibernate si basa su JOIN dichiarativi, per i quali la condizione di join è dichiarata nei metadati di mapping. Questo è il motivo per cui è impossibile costruire la query SQL nativa senza avere il percorso.


13
Finalmente qualcuno che ha risposto alla radice del problema ... (la necessità di aggiungere un prefisso alla tabella esterna con alias esistente) ha risolto il mio problema, grazie mille!
Saad Benbouzid

6
E se: non hai creato un'associazione nell'entità e hai appena salvato qualcosa come "Long userId;"
Spektakulatius
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.