it-swarm.com.de

Ruhezustand zeigt echtes SQL

wenn ich setze

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

in meiner hibernate.cfg.xml Konfigurationsdatei in der Konsole kann ich die SQL sehen.

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

Beispiel:

Aha

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

Kann ich sehen

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

das echte 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

Einige Frameworks 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"/>
233
Tommaso Taruffi

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

Wenn Sie möchten, dass die SQL direkt an die Datenbank gesendet wird (formatiert , ähnlich wie in Ihrem Beispiel ), müssen Sie eine Art von jdbc verwenden Treiber-Proxy wie P6Spy (oder log4jdbc ).

Alternativ können Sie die Protokollierung der folgenden Kategorien aktivieren (mithilfe einer log4j.properties -Datei hier):

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

Der erste entspricht hibernate.show_sql=true, der zweite gibt unter anderem die gebundenen Parameter aus.

Referenz

359
Pascal Thivent

Wenn Sie bereits sehen, dass der SQL-Code gedruckt wird, haben Sie den folgenden Code in Ihrer Datei hibernate.cfg.xml:

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

Fügen Sie Ihrer log4j.properties-Datei Folgendes hinzu, um auch die Bindungsparameter zu drucken:

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

Beachten Sie, dass der angezeigte Code unverändert an die Datenbank gesendet wird. Die Abfragen werden separat gesendet, um eine SQL-Injection zu verhindern. AFAIK Die? Marken sind Platzhalter, die von der Datenbank durch die Anzahl der Parameter ersetzt werden, nicht durch den Ruhezustand.

11
gubby

select this_.code from true.employee this_ where this_.code=?is was wird an Ihre Datenbank gesendet.

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

4
Stephen Denne