Ist es in Hibernate möglich, generierte SQL-Abfragen mit echten Werten anstelle von Fragezeichen zu drucken?
Wie würden Sie vorschlagen, um Abfragen mit echten Werten zu drucken, wenn es nicht möglich ist, mit Hibernate API?
Ist es in Hibernate möglich, generierte SQL-Abfragen mit echten Werten anstelle von Fragezeichen zu drucken?
Wie würden Sie vorschlagen, um Abfragen mit echten Werten zu drucken, wenn es nicht möglich ist, mit Hibernate API?
Wenn Sie spring-boot verwenden, können Sie die log4jdbc-spring-boot-starter-Abhängigkeit verwenden, die ein Fork von org.bgee.log4jdbc-log4j2 ist.
En pom.xml
Ich habe die folgende Abhängigkeit verwendet:
<dependency>
<groupId>com.integralblue</groupId>
<artifactId>log4jdbc-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
In der Dokumentation wird erwähnt, dass die SQL-Protokollierung nicht funktioniert, wenn Sie nur diese Abhängigkeit einbeziehen, wir müssen folgende Eigenschaft in application.properties angeben
logging.level.jdbc.sqlonly=INFO
sondern mit
Version 2.0.0, alle Protokollierungseigenschaften sind standardmäßig auf "info" eingestellt. Zum Zeitpunkt des Schreibens dieser Antwort ist die Nutzungszahl für 2.0.0 im Vergleich zu 1.0.2 geringer
In Version 2.0.0 werden die folgenden Eigenschaften standardmäßig gesetzt, auch wenn Sie keine Eigenschaften für die Sql-Protokollierung angeben
logging.level.jdbc.sqlonly=INFO
logging.level.jdbc.resultset=INFO
logging.level.jdbc.connection=INFO
logging.level.jdbc.resultsettable=INFO
logging.level.jdbc.audit=INFO
logging.level.jdbc.sqltiming=INFO
Wenn Sie also möchten, dass nur SQL-Abfragen mit ? gedruckt werden, die durch tatsächliche Werte ersetzt werden, und wenn Sie unnötige Protokollierung von Ergebnissen vermeiden möchten, setzen Sie diese Eigenschaften explizit auf
logging.level.jdbc.sqlonly=INFO
logging.level.jdbc.resultset=OFF
logging.level.jdbc.connection=OFF
logging.level.jdbc.resultsettable=OFF
logging.level.jdbc.audit=OFF
logging.level.jdbc.sqltiming=OFF
Ich hatte mit allen Antworten hier Probleme. Keine von ihnen gab mir tatsächlich Parameter für die Spring Data JPA-Abfrage, die ein Enum als PK übergeben wurde.
Für Hibernate 5.3:
<!-- silence the noise -->
<Logger name="org.hibernate.search.engine.metadata.impl" additivity="false"/>
<Logger name="org.hibernate.boot.internal" additivity="false"/>
<Logger name="org.hibernate.engine.internal" additivity="false"/>
<Logger name="org.hibernate.engine.jdbc" additivity="false"/>
<Logger name="org.hibernate.engine.transaction" additivity="false"/>
<Logger name="org.hibernate.engine.loading.internal" additivity="false"/>
<Logger name="org.hibernate.engine.spi.CollectionEntry" additivity="false"/>
<Logger name="org.hibernate.engine.query.spi.HQLQueryPlan" additivity="false"/>
<Logger name="org.hibernate.engine.query.spi.QueryPlanCache" additivity="false"/>
<Logger name="org.hibernate.engine.spi.IdentifierValue" additivity="false"/>
<Logger name="org.hibernate.engine.spi.CascadingActions" additivity="false"/>
<Logger name="org.hibernate.engine.spi.ActionQueue" additivity="false"/>
<Logger name="org.jboss.logging"/>
<Logger name="org.hibernate.SQL" level="debug" additivity="false">
<AppenderRef ref="Console"/>
</Logger>
<Logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="trace" additivity="false">
<AppenderRef ref="Console"/>
</Logger>
<Logger name="org.hibernate.engine" level="trace" additivity="false">
<AppenderRef ref="Console"/>
</Logger>
Mit hibernate.format_sql
eingestellt auf true
für den hübschen Druck, dies ist ein Beispiel für meine Ausgabe:
17:00:00,664 [TRACE] Named parameters: {1=DE} [main] org.hibernate.engine.spi.QueryParameters.traceParameters(QueryParameters.java:325)
17:00:00,671 [DEBUG]
select
countrysub0_.code as code1_23_,
countrysub0_1_.country_subdivision as country_1_61_
from
country_subdivision countrysub0_
left outer join
jurisdiction_country_subdivision countrysub0_1_
on countrysub0_.code=countrysub0_1_.jurisdiction
where
countrysub0_.code=? [main] org.hibernate.engine.jdbc.spi.SqlStatementLogger.logStatement(SqlStatementLogger.java:103)
Ich habe versucht, einfach die org.hibernate.engine.spi.QueryParameters
a trace
aber aus irgendeinem Grund wurden die benannten Parameter immer unterdrückt, also habe ich stattdessen alles andere unterdrückt, was protokolliert wurde. Es scheint aber nicht alle Parameter zu protokollieren, also brauchte ich immer noch die BasicBinding
auch das Protokoll.
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.