ERROR HQL: Ruta esperada para unirse


100

Sigo probando variaciones de esta consulta y parece que no puedo hacer que esto suceda. También hice referencia a esta publicación: ¡ Ruta esperada para unirse! Error de Nhibernate y parece que no puedo aplicar la misma lógica a mi consulta. Mi Userobjeto tiene una UserGroupcolección.

Entiendo que la consulta necesita hacer referencia a entidades dentro del objeto, pero por lo que veo, soy ...

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

Respuestas:


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

Como una consulta con nombre:

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

Utilice rutas en la declaración HQL, de una entidad a otra. Consulte la documentación de Hibernate sobre HQL y combinaciones para obtener más detalles.


32
¿Qué es un "camino"? Busqué en la documentación de HQL pero no encontré una definición.
gwg

7
significa que necesita vincular las entidades: en su ejemplo anterior, observe cómo pone ug.user u. Sin el ug antes, obtendría el error. Además, el 'usuario' en 'ug.user u' debería ser el nombre del campo en la clase UserGroup.
Lawrence

6
Esta sintaxis de HQL es molesta. Tuve que encontrar muchos ejemplos y encontré el tuyo.
Bằng Rikimaru

Entonces, ¿no puedo unir entidades "manualmente" sin un mapeo explícito (campo que se usará para unir) declarado con la Entidad?
Sr. Anderson

67

Debe nombrar la entidad que tiene la asociación a Usuario. Por ejemplo,

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

Esa es la "ruta" de la que se queja el mensaje de error: ruta desde UserGroup a la entidad User.

Hibernate se basa en JOIN declarativos, para los cuales la condición de combinación se declara en los metadatos de mapeo. Por eso es imposible construir la consulta SQL nativa sin tener la ruta.


13
Finalmente, alguien que respondió a la raíz del problema ... (la necesidad de prefijar una tabla externa con un alias existente) resolvió mi problema, ¡muchas gracias!
Saad Benbouzid

6
¿Qué pasa si: no hizo una asociación en la Entidad y simplemente guardó algo como 'Long userId;'
Spektakulatius
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.