Hibernate mostra SQL real

se eu definir

true 

no meu arquivo de configuração hibernate.cfg.xml no console eu posso ver o SQL.

Mas não é SQL real … Posso ver o código SQL que será passado diretamente para o database?

Exemplo:

Entendo

 select this_.code from true.employee this_ where this_.code=? 

Posso ver

 select employee.code from employee where employee.code=12 

o SQL real ?

Posso ver (…) o SQL real

Se você quiser ver o SQL enviado diretamente para o database (que é formatado de forma semelhante ao seu exemplo), você terá que usar algum tipo de proxy de driver jdbc como P6Spy (ou log4jdbc ).

Como alternativa, você pode ativar o registro das seguintes categorias (usando um arquivo log4j.properties aqui):

 log4j.logger.org.hibernate.SQL=DEBUG log4j.logger.org.hibernate.type=TRACE 

O primeiro é equivalente a hibernate.show_sql=true , o segundo imprime os parâmetros ligados entre outras coisas.

Referência

  • Hibernate 3.5 Core Documentation
    • 3.5. Exploração madeireira
  • Documentação principal do Hibernate 4.1
    • 4.1. Exploração madeireira

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

 true true true 

persistence.xml

Algumas estruturas usam persistence.xml :

    

Se você já pode ver o SQL sendo impresso, isso significa que você tem o código abaixo em seu hibernate.cfg.xml:

 true 

Para imprimir os parâmetros de binding também, inclua o seguinte no seu arquivo log4j.properties:

 log4j.logger.net.sf.hibernate.type=debug 

Vale a pena notar que o código que você vê é enviado para o database como está, as consultas são enviadas separadamente para evitar a injeção de SQL. AFAIK O? marcas são espaços reservados que são substituídos pelo número params pelo database, não pelo modo de hibernação.

select this_.code from true.employee this_ where this_.code=? é o que será enviado para o seu database.

this_ é um alias para essa instância da tabela de employee .