Ich möchte Hibernate HQL-Abfragen "trockenlaufen lassen". Das würde ich gerne wissen, was tatsächliche SQL-Abfragen Hibernate von bestimmten HQL-Abfrage ausführen wird, ohne die HQL-Abfrage tatsächlich gegen echte Datenbank auszuführen.Hibernate und trocken laufende HQL-Abfragen statisch
Ich habe Zugriff auf Hibernate Mapping für Tabellen, die HQL-Abfrage Zeichenfolge, die dialect für meine Datenbank. Ich habe auch Zugriff auf die Datenbank, wenn dies erforderlich ist.
Nun, wie kann ich alle SQL-Abfragen herausfinden, die Hibernate von meinem HQL erzeugen kann, ohne die Abfrage tatsächlich gegen irgendeine Datenbank auszuführen? Gibt es dafür Werkzeuge?
Beachten Sie, dass viele SQL-Abfragen aus einer HQL-Abfrage generiert werden können und die Menge der generierten SQL-Abfragen basierend auf dem Inhalt der Datenbank abweichen kann.
Ich frage nicht, wie Sie SQL-Abfragen protokollieren, während die HQL-Abfrage ausgeführt wird.
Edit: Ich habe nichts dagegen, eine Verbindung zur Datenbank, um einige Metadaten zu holen, ich möchte nur keine Abfragen ausführen.
Edit: Ich weiß auch, welche Grenzen und Offsets für die Abfrage gelten. Ich habe auch die tatsächlichen Parameter, die an Abfrage gebunden werden.
All diese Unordnung mit Reflexion ist völlig unnötig. 'HQLQueryPlan' hat einen öffentlichen Konstruktor; Sie müssen Ihre Sitzungsfactory nur auf 'SessionFactoryImplementor' übertragen. – ChssPly76
Stimmt, und nachdem er seine Frage erneut gelesen hat, ist das wahrscheinlich alles, was er braucht. Ich habe die Situation angesprochen, in der Sie die HQL/SQL für jede in Ihrer Anwendung ausgeführte Abfrage in Echtzeit erfassen wollen - ohne jede Klasse in der Anwendung ändern zu müssen, die eine Abfrage ausführt. Da ich keine Löschberechtigung habe, habe ich eine Zeile zur Klärung hinzugefügt. –
Fair genug; Wenn Sie jedoch nur SQL erfassen möchten, ist es wahrscheinlich einfacher (und viel wahrscheinlicher, Hibernate-Updates zu überleben), einen einfachen Appender zu schreiben und an 'org.hibernate.SQL' anzuhängen :-) – ChssPly76