Wenn mein Code einen Aufruf wie diesen ausgibt:
entityManager.find(Customer.class, customerID);
Wie kann ich die SQL-Abfrage für diesen Aufruf sehen? Angenommen, ich habe keinen Zugriff auf den Datenbankserver, um die Anrufe zu profilieren / überwachen. Gibt es eine Möglichkeit, die entsprechenden SQL-Abfragen, die von JPA-Aufrufen ausgegeben werden, in meiner IDE zu protokollieren oder anzuzeigen? Ich gehe gegen SQL Server 2008 R2 mit dem jTDS-Treiber.
Antworten:
Die Protokollierungsoptionen sind anbieterspezifisch. Sie müssen wissen, welche JPA-Implementierung Sie verwenden.
Ruhezustand ( siehe hier ):
EclipseLink ( siehe hier ):
OpenJPA ( siehe hier ):
DataNucleus ( siehe hier ):
Stellen Sie die Protokollkategorie
DataNucleus.Datastore.Native
auf eine Ebene wie einDEBUG
.quelle
Wenn Sie EclipseLink verwenden und die SQL-Parameterwerte ausgeben möchten, können Sie diese Eigenschaft Ihrer Datei persistence.xml hinzufügen:
quelle
Wenn Sie den Ruhezustand und den Logback als Logger verwenden, können Sie Folgendes verwenden (zeigt nur die Bindungen und nicht die Ergebnisse an):
org.hibernate.SQL = DEBUG druckt die Abfrage
org.hibernate.type = TRACE druckt die Bindungen und normalerweise die Ergebnisse, die durch den benutzerdefinierten Filter unterdrückt werden
Sie benötigen die Janino-Abhängigkeit (http://logback.qos.ch/manual/filters.html#JaninoEventEvaluator):
quelle
In EclipseLink können Sie die DatabaseQuery-API verwenden, um die SQL für eine bestimmte Abfrage zur Laufzeit abzurufen:
Diese SQL wird enthalten? für Parameter. Um die SQL mit den Argumenten zu übersetzen, benötigen Sie einen DatabaseRecord mit den Parameterwerten.
Quelle: So erhalten Sie SQL für eine Abfrage
quelle
Fügen Sie diese beiden Parameter in die Datei persistence.xml ein, um alle SQL- und Parameter in OpenJPA anzuzeigen:
quelle
Wenn Sie die genauen Abfragen mit Parameterwerten und Rückgabewerten anzeigen möchten, können Sie einen JDBC-Proxy-Treiber verwenden. Es werden alle JDBC-Aufrufe abgefangen und ihre Werte protokolliert. Einige Proxies:
Sie bieten möglicherweise auch einige zusätzliche Funktionen, z. B. das Messen der Ausführungszeit für Abfragen und das Sammeln von Statistiken.
quelle
Beispiel mit log4j ( src \ log4j.xml ):
quelle
Wenn Sie WildFly / JBoss verwenden, setzen Sie außerdem die Protokollierungsstufe von org.hibernate auf DEBUG
quelle
Eine weitere gute Option, wenn Sie zu viel Protokoll haben und nur als temporäres Protokoll verwenden möchten
System.out.println()
, können Sie je nach Anbieter Folgendes tun:quelle
Wenn Sie das Spring Framework verwenden. Ändern Sie die Datei application.properties wie folgt
quelle
Ich habe einen Spickzettel erstellt, von dem ich denke, dass er für andere nützlich sein kann. In allen Beispielen können Sie das entfernen
format_sql
Eigenschaft wenn Sie die protokollierten Abfragen in einer einzelnen Zeile halten möchten (kein hübsches Drucken).Hübsche SQL-Abfragen zum Standardisieren ohne Parameter vorbereiteter Anweisungen und ohne Optimierungen eines Protokollierungsframeworks :
application.properties
Datei:application.yml
Datei:Hübsche SQL-Abfragen mit Parametern vorbereiteter Anweisungen unter Verwendung eines Protokollierungsframeworks drucken :
application.properties
Datei:application.yml
Datei:Hübsche Druck-SQL-Abfragen ohne Parameter vorbereiteter Anweisungen unter Verwendung eines Protokollierungsframeworks :
application.properties
Datei:application.yml
Datei:Quelle (und weitere Details): https://www.baeldung.com/sql-logging-spring-boot
quelle
Siehe Der Ruhezustand kann die Anzeige von SQL mit dem Spring JPA Vendor Adapter nicht beenden
quelle
Fügen Sie mit Spring Boot einfach Folgendes hinzu: spring.jpa.show-sql = true to application.properties. Dies zeigt die Abfrage, jedoch ohne die tatsächlichen Parameter (Sie sehen? Anstelle jedes Parameters).
quelle
Während der explorativen Entwicklung und um die SQL-Debugging-Protokollierung auf die spezifische Methode zu konzentrieren, die ich überprüfen möchte, dekoriere ich diese Methode mit den folgenden Logger-Anweisungen:
quelle
EclipseLink zur Ausgabe von SQL (persistence.xml config):
quelle
Es gibt eine Datei namens persistence.xml. Drücken Sie Strg + Umschalt + R und finden Sie sie. Dann gibt es einen Ort, der so etwas wie showSQL geschrieben hat.
Sagen Sie es einfach als wahr
Ich bin nicht sicher, ob der Server als Debug-Modus gestartet werden muss. Überprüfen Sie die auf der Konsole erstellten SQLs.
quelle