[Solucionado] no entiendo como se traduce esta consulta en hibernate

Iniciado por jhonatanAsm, 24 Enero 2015, 18:18 PM

0 Miembros y 2 Visitantes están viendo este tema.

jhonatanAsm

hola, me podrían ayudar a entender esta consulta en hibernate:

Código (java) [Seleccionar]


String SQL_rolPersonal =
"SELECT usuarioRolPersonal.rolPersonal
FROM UsuarioRolPersonal usuarioRolPersonal
WHERE usuarioRolPersonal.usuario.idUsuario = "+usuario.getIdUsuario();

RolPersonal rolPersonal = (RolPersonal) sessionFactory.getCurrentSession().createQuery(SQL_rolPersonal).uniqueResult();



primero se declara la query, y luego se ejecuta y se guarda en el objeto rolPersonal, lo que yo no entiendo es a qué tabla y columna llama esa query, ya que yo no tengo ninguna tabla con el nombre UsuarioRolPersonal. saludos.
mi primer lenguaje fue ensamblador, tengo 60 años, y no creo que haya sido un error.

- La mayor complejidad de todas es hacer complejo algo que no lo es.

- El inteligente no es aquel que lo sabe todo sino aquel que sabe utilizar lo poco que sabe.

jhonatanAsm

ok ok ok, xD

resulta que UsuarioRolPersonal es una clase, y tiene un objeto de tipo Usuario, y este objeto usuario tiene un atributo llamado idUsuario.

bueno, la documentación dice que createQuery es para hacer querys usando Clases java.
mi primer lenguaje fue ensamblador, tengo 60 años, y no creo que haya sido un error.

- La mayor complejidad de todas es hacer complejo algo que no lo es.

- El inteligente no es aquel que lo sabe todo sino aquel que sabe utilizar lo poco que sabe.

Usuario Invitado

#2
Claro. Recuerda que con los ORM trabajas siempre en base a objetos. Aunque UsuarioRolPersonal es una clase Java, representa a la tabla usuariorolpersonal. Por lo que los atributos de ésta clase, hacen referencia a las columnas de dicha tabla.

Supongo que Hibernate hará una consulta como:

Código (sql) [Seleccionar]
SELECT * FROM usuariorolpersonal u
WHERE u.id_usuario IN
(SELECT u.id_usuario FROM usuario u)


En tu archivo persistence.xml, puedes añadir la propiedad "show_sql" para ver el código SQL que fabrica Hibernate:
Código (xml) [Seleccionar]

<property name="show_sql" value="true"/>


Te recomiendo usar Hibernate como implementación de JPA y no Hibernate nativo. Usar siempre los estándars tienen sus ventajas. Además, siempre es posible obtener la sesión original de Hibernate para poder extender un poco JPA. Pero como recomendación, usar JPA con Hibernate o EclipseLink.
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

jhonatanAsm

gracias, pero tengo una duda,
cómo sabes que no uso a hibernate como implementación de JPA??
mi primer lenguaje fue ensamblador, tengo 60 años, y no creo que haya sido un error.

- La mayor complejidad de todas es hacer complejo algo que no lo es.

- El inteligente no es aquel que lo sabe todo sino aquel que sabe utilizar lo poco que sabe.

Usuario Invitado

Lo asumo al leer ésta línea donde obtienes la sesión de Hibernate:

Código (=java) [Seleccionar]
RolPersonal rolPersonal = (RolPersonal) sessionFactory.getCurrentSession().createQuery(SQL_rolPersonal).uniqueResult();

Si usaras JPA harías:

Código (=java) [Seleccionar]
em.getTransaction().begin();
Query query = em.createQuery(sql);
...
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

jhonatanAsm

mi primer lenguaje fue ensamblador, tengo 60 años, y no creo que haya sido un error.

- La mayor complejidad de todas es hacer complejo algo que no lo es.

- El inteligente no es aquel que lo sabe todo sino aquel que sabe utilizar lo poco que sabe.