2012-05-04 20 views
71

Sigo intentando variaciones de esta consulta y parece que esto no puede suceder. También he hecho referencia a esta publicación: Path Expected for Join! Nhibernate Error y parece que no puedo aplicar la misma lógica a mi consulta. Mi objeto User tiene una colección UserGroup.HQL ERROR: Ruta esperada para join

entiendo que la consulta tiene que hacer referencia a las entidades dentro del objeto, pero de lo que estoy siendo yo ...

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

Respuesta

102
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" 
) 

utilizar rutas en la declaración HQL, de una entidad a la otra. Vea el Hibernate documentation on HQL and joins para más detalles.

+22

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

+2

significa que necesita vincular las entidades: en su ejemplo anterior, tenga en cuenta cómo coloca ug.user u. Sin el error anterior, obtendría el error. ¡Además, el "usuario" en "ug.user u" debería ser el nombre del campo en el Grupo de usuarios de la clase! – Lawrence

+1

Esta sintaxis de HQL es molesta. Tenía que encontrar muchos ejemplos y encontrar el tuyo. –

38

Es necesario nombrar la entidad que mantiene la asociación de usuario. Por ejemplo,

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

Ese es el "camino" el mensaje de error se queja - camino desde UserGroup de entidad Usuario.

Hibernate se basa en uniones declarativas, para las cuales la condición de unión se declara en los metadatos de la asignación. Es por eso que es imposible construir la consulta SQL nativa sin tener la ruta.

+9

Finalmente alguien respondiendo la raíz del problema ... (la necesidad de prefijar la tabla extranjera con el alias existente) resolvió mi problema, ¡muchas gracias! –