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?
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
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="use_sql_comments">true</property>
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"/>
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.
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
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.
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
.