web-dev-qa-db-fra.com

Hibernate montre le vrai SQL

si je mis

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

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

Mais ce n'est pas réel SQL ... Puis-je voir le code SQL qui sera transmis directement à 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 réel SQL?

381
Tommaso Taruffi

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>

persistence.xml

Certains frameworks utilisent persistence.xml:

<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.use_sql_comments" value="true"/>
233
Tommaso Taruffi

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

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

Vous pouvez également activer la journalisation des catégories suivantes (en utilisant ici un fichier log4j.properties):

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

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

Référence

359
Pascal Thivent

Si vous pouvez déjà voir le code SQL en cours d'impression, cela signifie que vous avez le code ci-dessous dans votre fichier hibernate.cfg.xml:

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

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

log4j.logger.net.sf.hibernate.type=debug
15
Brian Riehman

Il est à noter que le code que vous voyez est envoyé tel quel à la base de données, les requêtes sont envoyées séparément pour empêcher l'injection SQL. Autant que je sache? les marques sont des espaces réservés qui sont remplacés par le nombre params par la base de données, pas par hibernate.

11
gubby

select this_.code from true.employee this_ where this_.code=?is ce qui sera envoyé à votre base de données.

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

4
Stephen Denne