440 Stimmen

Hibernate zeigt echtes SQL

Wenn ich

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

in meinem hibernate.cfg.xml Konfigurationsdatei in der Konsole kann ich das SQL sehen.

Aber es ist nicht real SQL... Kann ich den SQL-Code sehen, der direkt an die Datenbank übergeben wird?

Beispiel:

Ich sehe

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

Kann ich sehen

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

el real SQL?

411voto

Pascal Thivent Punkte 548176

Kann ich (...) das echte SQL sehen?

Wenn Sie das direkt an die Datenbank gesendete SQL sehen möchten (das formatiert ist ähnlich zu Ihrem Beispiel), müssen Sie eine Art von Jdbc-Treiber-Proxy verwenden wie P6Spy (o log4jdbc ).

Alternativ können Sie die Protokollierung der folgenden Kategorien aktivieren (mit einem log4j.properties Datei hier):

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

Die erste ist gleichbedeutend mit hibernate.show_sql=true die zweite gibt unter anderem die gebundenen Parameter aus.

Référence

283voto

Tommaso Taruffi Punkte 8682

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>

persistenz.xml

Einige Rahmenwerke verwenden persistence.xml :

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

19voto

Brian Riehman Punkte 24780

Wenn Sie bereits sehen, dass das SQL gedruckt wird, bedeutet dies, dass Sie den folgenden Code in Ihrer hibernate.cfg.xml haben:

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

Um auch die Bindungsparameter zu drucken, fügen Sie der Datei log4j.properties folgendes hinzu:

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

11voto

gub Punkte 4859

Es ist erwähnenswert, dass der Code, den Sie sehen, direkt an die Datenbank gesendet wird. Die Abfragen werden separat gesendet, um SQL-Injection zu verhindern. AFAIK sind die ? Markierungen Platzhalter, die von der Datenbank, nicht von Hibernate, durch die Number Params ersetzt werden.

2voto

Stephen Denne Punkte 35003

select this_.code from true.employee this_ where this_.code=? es was an Ihre Datenbank gesendet werden soll.

this_ ist ein Alias für diese Instanz der employee Tisch.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X