Hibernate

De Dos Ideas.

Hibernate es un framework de persistencia de objetos para Java. Su función principal es la de Mapeo Objeto-Relacional, es decir, mapear objetos a tablas de una base de datos relacional.

Actualmente Hibernate cuanta con varios subproyectos que resuelven distintos aspectos del acceso y manipulación de datos.

Log de querys

Es posible decirle a Hibernate que realice un log de los comandos SQL que ejecuta. Esto resulta muy útil en tiempo de desarrollo.

Para esto es necesario definir la propiedad show_sql en la configuración de Hibernate (generalmente, el archivo hibernate.cfg.xml):

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

Al ejecutar veremos algo como lo siguiente:

SELECT emails0_.PERSON_ID AS PERSON1_0_, emails0_.EMAIL_ADDR AS EMAIL2_0_ 
FROM PERSONA emails0_
WHERE emails0_.PERSON_ID=?

Si además queremos que el log aparezca mejor formateado, agregamos la variable format_sql:

<property name="format_sql">true</property>

Y veremos:

SELECT
emails0_.PERSON_ID AS PERSON1_0_,
emails0_.EMAIL_ADDR AS EMAIL2_0_
FROM
PERSONA emails0_
WHERE
emails0_.PERSON_ID=?

Si ademas desean saber los valores de las bind variables, y variables de resultado que se utilizan en el query, deben configurar lo siguiente en el archivo log4j.properties:

log4j.logger.org.hibernate.type=debug

Y veremos:

12:30:56,551 DEBUG LongType:133 - binding '1' to parameter: 1
12:30:56,551 DEBUG LongType:172 - returning '1' as column: PERSON1_0_
12:30:56,567 DEBUG StringType:172 - returning 'demo@dosideas.com' as column: EMAIL2_0_

Otra opción bastante interesante es ver el manejo de recursos por parte de Jdbc. Se debe agregar la propiedad:

log4j.logger.org.hibernate.jdbc=debug

Y veremos:

12:30:56,551 - opening JDBC connection
12:30:56,553 - preparing statement
12:30:56,554 - about to open ResultSet (open ResultSets: 0, globally: 0)
12:30:57,551 - about to close ResultSet (open ResultSets: 1, globally: 1)
12:30:58,551 - about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
12:30:58,552 - closing statement
12:30:56,553 - aggressively releasing JDBC connection
12:30:56,554 - releasing JDBC connection [ (open PreparedStatements: 0, globally: 0)
(open ResultSets: 0, globally: 0)]

Ver también