with values type queries print parameter org basicbinder all java sql hibernate orm

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


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 .