Java - consulta con HQL

   
Vista:

consulta con HQL

Publicado por David (3 intervenciones) el 11/08/2008 14:45:47
Hola,

Tengo que hacer una consulta con hql y no se muy bien porque, no me funciona.

El tema es el siguiente: tengo dos tablas bien relaccionadas y tengo que comprobar y el nombre que busco esta en dos campos, pero cada uno de los campos pertenece a una tabla.

Alguien podria decirme como seria la query?

La que tengo pero no funciona es la siguente:

from User user where upper(user.workcenter.name) = :workCenter or
upper(user.workCenterPrivate) = :workCenter

Gracias !!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:consulta con HQL

Publicado por Mario (199 intervenciones) el 12/08/2008 10:16:53
No estoy seguro... pero yo diría que tendrías que hacer un join de las dos tablas, ya que según creo ver intentas acceder a un campo de la clase workcenter, la cual no está incluida en el from. Como no sé exactamente los campos ni lo que buscas... voy a intentar hacer la consulta como yo creo que sería, aunque no sea exacta, para ver si te sirve de ayuda al menos. Creo que sería así:

FROM User u LEFT JOIN FETCH u.workcenter wc WHERE upper(wc.name =:workCenter or upper(u.workCenterPrivate )=:workCenter

Espero que te sirva de algo y si puedo ayudarte en algo más no dudes en comentármelo ;)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:consulta con HQL

Publicado por David (3 intervenciones) el 12/08/2008 10:32:55
Gracias mario, aunque no me acabo de funcionar.

veras creo que el problema me viene por lo siguente:

la query que necesitaria seria la siguente:

SELECT * FROM bms_user user0_, bms_workcenter workcenter1_
WHERE user0_.work_center_id = workcenter1_.ID
AND UPPER (workcenter1_.NAME) = 'CENTRO PRIVADO NUMERO 2' OR UPPER (user0_.work_center_private) = 'CENTRO PRIVADO NUMERO 2'

para ello, como estoy usando hql escribo:

from User user where upper (wc.name) =:workCenter or upper(u.workCenterPrivate )=:workCenter

lo que en un principio traeria los valores correctos. El problema es que cuando hibernate la genera, escribe lo siguente:

SELECT * FROM bms_user user0_, bms_workcenter workcenter1_
WHERE user0_.work_center_id = workcenter1_.ID
AND (UPPER (workcenter1_.NAME) = 'CENTRO PRIVADO NUMERO 2' OR UPPER (user0_.work_center_private) = 'CENTRO PRIVADO NUMERO 2')

el parentesis que mete justo despues del AND es el que me echa abajo la query, el problema es que no se como hacer para que no me incluya ese parentesis.

de todas formas muchas gracias por la ayuda!!!

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:consulta con HQL

Publicado por Mario (199 intervenciones) el 12/08/2008 11:59:16
Has intentado realizarlo con el JOIN como te dije?? Es que... el join te evitaría la primera condición que es con la que unes las tablas... con lo cual perdería el sentido el paréntesis y seguramente no te lo pondría.

Aún así tampoco termino de entender muy bien por qué te fastidia el paréntesis la consulta, pero si tú lo tienes claro no lo pongo en duda.

La verdad es que no se me ocurre mucho más, no soy ni mucho menos un experto en hibernate... pero si das con la solución escríbela por aquí, así la aprendo yo también ; )
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:consulta con HQL

Publicado por David (3 intervenciones) el 12/08/2008 12:24:20
Genial Mario, he insistido con el join y aunque me a costado un pelin, creo que funciona.

la query en le mapeado queda asi:

from User user left join fetch user.workcenter wc where(UPPER (wc.name) = :workCenter) OR ( UPPER (user.workCenterPrivate) = :workCenter)

donde user y workcenter son las dos tablas.

Espero que sirva de ayuda para los demas. Si tienes alguna duda puedes mandarme un correo si quieres (te ayudare en lo que pueda).

Gracias!!!.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:consulta con HQL

Publicado por Mario (199 intervenciones) el 12/08/2008 13:18:04
Perfecto!! Eso era lo que trataba de explicarte.
Me alegro de que te haya funcionado, creo que es la mejor forma de acceder a objetos contenidos dentro de otros objetos, al menos es la forma que menos problemas me da a mi, aunque solo llevo un par de meses trabajando con Hibernate.
Pues nada, esperemos que sirva de ayuda para más gente.
No dudes en preguntarme también cuando tengas otras dudas, que aunque no sea un experto... siempre dos cabezas piensan mejor que una ; )
Taluego!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar