Chciałbym "dry-run" Hibernate HQL kwerend. To chciałbym wiedzieć, jakie rzeczywiste zapytania SQL Hibernate wykona z danej kwerendy HQL, bez faktycznego wykonywania kwerendy HQL przeciwko rzeczywistej bazie danych.Hibernacja i dry-running zapytania HQL statycznie
Mam dostęp do mapowania hibernacji dla tabel, ciąg kwerendy HQL, dialect dla mojej bazy danych. Mam również dostęp do bazy danych, jeśli jest to potrzebne.
Teraz, w jaki sposób mogę znaleźć wszystkie zapytania SQL Hibernate może generować z mojego HQL bez faktycznego wykonywania kwerendy przeciwko dowolnej bazie danych? Czy są na to jakieś narzędzia?
Należy zauważyć, że wiele zapytań SQL można wygenerować z jednego zapytania HQL, a zestaw generowanych zapytań SQL może się różnić w zależności od zawartości bazy danych.
Nie pytam, jak rejestrować zapytania SQL podczas wykonywania kwerendy HQL.
Edycja: Nie mam nic przeciwko łączeniu się z bazą danych w celu pobrania niektórych metadanych, po prostu nie chcę wykonywać zapytań.
Edycja: wiem również, jakie limity i korekty są stosowane do zapytania. Mam również faktyczne parametry, które będą wiązały się z zapytaniem.
Wszystko to kręcenie refleksami jest zupełnie niepotrzebne. 'HQLQueryPlan' ma publiczny konstruktor; wystarczy przesłać fabrykę sesji do 'SessionFactoryImplementor'. – ChssPly76
To prawda, i po ponownym przeczytaniu jego pytania, to prawdopodobnie wszystko, czego potrzebuje. Zajmowałem się sytuacją, w której chcesz przechwytywać HQL/SQL dla każdego zapytania uruchamianego w aplikacji w czasie rzeczywistym - bez konieczności zmiany każdej klasy w aplikacji, która wykonuje zapytanie. Ponieważ nie mam uprawnień do usuwania, dodałem linię, aby wyjaśnić. –
Wystarczająco fair; Jeśli jednak chcesz tylko uchwycić SQL, prawdopodobnie łatwiej (i znacznie bardziej prawdopodobne jest, że przeżyjesz aktualizacje Hibernacji), aby napisać prostego programistę i dołączyć go do 'org.hibernate.SQL' :-) – ChssPly76