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?
hibernate-types
verfügt über eine Utility-Methode zur Protokollierung von JPQL- und Kriterienabfragen. Weitere Details finden Sie in der Autorenbeschreibung Blogbeitrag . Hier ist ein Beispiel mit JPQL:
Query jpql = entityManager.createQuery("""
select
YEAR(p.createdOn) as year,
count(p) as postCount
from
Post p
group by
YEAR(p.createdOn)
""", Tuple.class
);
String sql = SQLExtractor.from(jpql);
Le site sql
hat den folgenden Wert:
SELECT
extract(YEAR FROM sqlextract0_.created_on) AS col_0_0_,
count(sqlextract0_.id) AS col_1_0_
FROM
post p
GROUP BY
extract(YEAR FROM p.created_on)
Sie kann unverändert in die DB-Konsole kopiert werden.
Die einfachste Lösung für mich ist die Implementierung einer regulären String-Ersetzung, um Parametereingaben durch Parameterwerte zu ersetzen (der Einfachheit halber werden alle Parameter als String behandelt):
String debuggedSql = sql;
// then, for each named parameter
debuggedSql = debuggedSql.replaceAll(":"+key, "'"+value.toString()+"'");
// and finally
System.out.println(debuggedSql);
Oder etwas Ähnliches für Positionsparameter (?).
Achten Sie auf Nullwerte und bestimmte Werttypen wie Datum, wenn Sie möchten, dass ein lauffähiges SQL protokolliert wird.
Utilice Wireshark oder etwas Ähnliches:
Keine der oben genannten Antworten druckt SQL mit Parametern richtig aus, oder es ist mühsam, es mit ihnen zum Laufen zu bringen. Ich erreichte dies durch die Verwendung von WireShark die alle SQL/Befehle erfasst, die von der Anwendung an Oracle/MySQL usw. mit den Abfragen gesendet werden.
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.