java - values - Hibernate show real SQL
print queries hibernate (5)
Esta pregunta ya tiene una respuesta aquí:
si pongo
<property name="show_sql">true</property>
En mi archivo de configuración hibernate.cfg.xml en la consola puedo ver el SQL.
Pero no es SQL real ... ¿Puedo ver el código SQL que se pasará directamente a la base de datos?
Ejemplo:
Veo
select this_.code from true.employee this_ where this_.code=?
Puedo ver
select employee.code from employee where employee.code=12
El SQL real ?
¿Puedo ver (...) el SQL real?
Si desea ver el SQL enviado directamente a la base de datos (que tiene un formato similar a su ejemplo), tendrá que usar algún tipo de proxy de controlador jdbc como P6Spy (o log4jdbc ).
Alternativamente, puede habilitar el registro de las siguientes categorías (usando un archivo log4j.properties
aquí):
log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.type=TRACE
El primero es equivalente a hibernate.show_sql=true
, el segundo imprime los parámetros enlazados entre otras cosas.
Referencia
- Hibernate 3.5 Core Documentation
- Hibernate 4.1 Core Documentation
log4j.properties
log4j.logger.org.hibernate=INFO, hb
log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.type=TRACE
log4j.logger.org.hibernate.hql.ast.AST=info
log4j.logger.org.hibernate.tool.hbm2ddl=warn
log4j.logger.org.hibernate.hql=debug
log4j.logger.org.hibernate.cache=info
log4j.logger.org.hibernate.jdbc=debug
log4j.appender.hb=org.apache.log4j.ConsoleAppender
log4j.appender.hb.layout=org.apache.log4j.PatternLayout
log4j.appender.hb.layout.ConversionPattern=HibernateLog --> %d{HH:mm:ss} %-5p %c - %m%n
log4j.appender.hb.Threshold=TRACE
hibernate.cfg.xml
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="use_sql_comments">true</property>
persistencia.xml
Algunos frameworks usan persistence.xml
:
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.use_sql_comments" value="true"/>
Cabe destacar que el código que ve se envía a la base de datos tal como está, las consultas se envían por separado para evitar la inyección de SQL. AFAIK El? las marcas son marcadores de posición que son reemplazados por los parámetros de número por la base de datos, no por hibernación.
Si ya puede ver la impresión de SQL, eso significa que tiene el siguiente código en su hibernate.cfg.xml:
<property name="show_sql">true</property>
Para imprimir también los parámetros de enlace, agregue lo siguiente a su archivo log4j.properties:
log4j.logger.net.sf.hibernate.type=debug
select this_.code from true.employee this_ where this_.code=?
Es lo que se enviará a su base de datos.
this_
es un alias para esa instancia de la tabla de employee
.