6 Stimmen

Wie kann man das von Hibernate generierte SQL abfangen?

Für ein Sicherheitssystem, das wie ein großer Bruder funktioniert (wie eine überwachte obligatorische Zugangskontrolle), müssen wir alle Select-Anweisungen, die hibernate erzeugt, abfangen und verarbeiten. Wir speichern den Benutzer, den Zeitstempel und den Sql-Select in einer Datenbank, um ein Profiling mit anderen Tools zu ermöglichen. Anhand dieser Informationen lässt sich feststellen, was ein Benutzer versucht hat, zu betrachten. Für die Select-Anweisungen sind die vorbereiteten Eigenschaften wertvoll. Wir benötigen die vollständige SQL-Anweisung einschließlich aller Parameter.

Gibt es einen Listener oder Interceptor, mit dem wir all diese Dinge verbinden und bearbeiten können? Das größte Problem ist bisher das Sammeln der Anweisungsparameter.

Dankeschön

3voto

KeatsPeeks Punkte 18568

Sie können verwenden Interceptor.prepareSQL() (3.1+), um die vorbereiteten Anweisungen abzufangen.

Ich glaube nicht, dass Sie die tatsächlichen Parameter erhalten können, ohne in die Abstraktionsschicht hinabzusteigen. Eine mögliche Lösung wäre die Verwendung eines JDBC-Proxy-Treibers (siehe P6Spy ).

Ich hoffe, das hilft.

3voto

Vineet Reynolds Punkte 74302

Die tatsächlichen Parameterwerte werden (zumindest meines Wissens nach) zur Verfügung gestellt, wenn die Protokollierungsebene des org.hibernate-Paket auf DEBUG eingestellt ist und die Eigenschaft hibernate.show_sql gesetzt ist. Verwenden Sie einen JDBCAppender, wenn Sie die Logger-Ausgabe in der Datenbank selbst wünschen.

Alternativ können Sie auch einen Blick auf die log4jdbc-Projekt in der Folgendes behauptet wird:

In der protokollierten Ausgabe, für vor Anweisungen, die Bindungsargumente sind automatisch in die SQL-Ausgabe eingefügt Ausgabe eingefügt. Dies verbessert erheblich die Lesbarkeit und Debugging für viele Fällen.

Wenn dies nicht möglich ist, könnten Sie prüfen, ob P6Spy kann in Ihrer Situation verwendet werden . Auf WebLogic Server wird die entsprechende Funktionalität über die WebLogic JDBC-Spion die standardmäßig mit den WebLogic JDBC-Treibern für bestimmte Datenbanken geliefert wird. Beide schreiben in System.out und nicht in eine Datenbank (wenn ich mich nicht irre), so dass es nicht so nützlich sein könnte.

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