Una nota rápida de un problema con el que me he pegado hace poco.
Necesitaba lanzar una función de BBDD (Oracle) desde Hibernate manteniendo la transacción. Para lanzar la función desde jdbc, en las versiones anteriores de Hibernate era muy intuitivo obtener el objeto Connection relacionado con la sesión pero en Hibernate 4 ha cambiado el interface Session.
En versiones anteriores de Hibernate…
El código java para obtener el objeto Connection relacionado con la sesión es:
1 import org.hibernate.Session;2 import java.sql.Connection;3 ...4 Connection conn = sesion.connection();
Código 01
… en Hibernate 4
Ahora es:
1 import org.hibernate.Session;2 import org.hibernate.engine.spi.SessionImplementor;3 import java.sql.Connection;4 ...5 SessionImplementor miSessionImplementor = (SessionImplementor) sesion;6 Connection conn = miSessionImplementor.connection();
Código 02
Esto es así porque el interfaz Session cambia en Hibernate 4. Mirando la documentación del api se puede ver que la única implementación del interfaz Session es SessionImp que implementa a su vez el interface SessionImplementor.
Comprobado, esta es la conexión «güena». Lo que hagas con ella (lanzar una función, procedimiento almacenado, etc) estás en la misma transacción de base de datos que tiene la sesión.
Así que está un poco enrevesado, pero ahí está…
Espero que os sirva.
Excelente lo que esta buscando, ¡gracias!