hola, me podrían ayudar a entender esta consulta en hibernate:
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.
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.
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:
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:
<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.
gracias, pero tengo una duda,
cómo sabes que no uso a hibernate como implementación de JPA??
Lo asumo al leer ésta línea donde obtienes la sesión de Hibernate:
RolPersonal rolPersonal = (RolPersonal) sessionFactory.getCurrentSession().createQuery(SQL_rolPersonal).uniqueResult();
Si usaras JPA harías:
em.getTransaction().begin();
Query query = em.createQuery(sql);
...
gracias, que amable :)