Hibernar mostrar SQL real [duplicar]


Esta pregunta ya tiene una respuesta aquí:

Si establezco

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

En mi hibernar.cfg.xml archivo de configuración en la consola puedo ver el SQL.

Pero no es real SQL... ¿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 real SQL?

Author: Daniel Serodio, 2010-03-29

5 answers

Puedo ver (...) el verdadero SQL

Si desea ver el SQL enviado directamente a la base de datos (que tiene el 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 otros cosa.

Referencia

 323
Author: Pascal Thivent,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-28 11:33:33

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

Hibernar.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"/>
 209
Author: Tommaso Taruffi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-11 17:49:48

Si ya puede ver el SQL que se está imprimiendo, eso significa que tiene el código a continuación en su hibernación.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
 15
Author: Brian Riehman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-29 12:51:47

Vale la pena señalar que el código que ve se envía a la base de datos tal cual, las consultas se envían por separado para evitar la inyección SQL. AFAIK El ? las marcas son marcadores de posición que son reemplazados por los parámetros numéricos por la base de datos, no por hibernar.

 11
Author: gubby,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-06 21:11:50

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 employee.

 6
Author: Stephen Denne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-29 09:49:12