387 votes

Hibernate affiche le vrai SQL

Si je définis

true

dans mon fichier de configuration hibernate.cfg.xml, dans la console je peux voir le SQL.

Mais ce n'est pas du SQL réel... Puis-je voir le code SQL qui sera directement transmis à la base de données?

Exemple:

Je vois

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

Puis-je voir

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

le SQL réel?

361voto

Pascal Thivent Points 295221

Puis-je voir (...) le vrai SQL

Si vous voulez voir le SQL envoyé directement à la base de données (qui est formaté similaire à votre exemple), vous devrez utiliser une sorte de proxy de pilote jdbc comme P6Spy (ou log4jdbc).

Alternativement, vous pouvez activer le journalisation des catégories suivantes (en utilisant un fichier log4j.properties ici):

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

Le premier est équivalent à hibernate.show_sql=true, le deuxième affiche les paramètres liés entre autres.

Référence

237voto

Tommaso Taruffi Points 2264

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

Some frameworks use persistence.xml:

15voto

Brian Riehman Points 7510

Si vous pouvez déjà voir le SQL être affiché, cela signifie que vous avez le code ci-dessous dans votre fichier hibernate.cfg.xml :

true

Pour afficher également les paramètres de liaison, ajoutez ce qui suit à votre fichier log4j.properties :

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

11voto

jgubby Points 1630

Il est bon de noter que le code que vous voyez est envoyé à la base de données tel quel, les requêtes sont envoyées séparément pour éviter les injections SQL. À ma connaissance, les ? marques sont des espaces réservés qui sont remplacés par le nombre de paramètres par la base de données, et non par Hibernate.

3voto

Stephen Denne Points 17031

sélectionnez this_.code de true.employee this_ où this_.code=? est ce qui sera envoyé à votre base de données.

this_ est un alias pour cette instance de la table employee.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X