Конвертер JPQL в SQL
Можно ли получить доступ к SQL, который генерируется JPQL?
Я хотел бы использовать SQL, чтобы позже создать представление для моих целей.
Я использую Hibernate, если это имеет значение.
3 ответа
Поэтому вам нужно написать свою собственную реализацию JPQL:-) В конце концов, преобразование JPQL в SQL для хранилища данных RDBMS - это реализация JPQL. Удачи!
Конечно, вы можете использовать существующую реализацию JPQL, будь то Hibernate, или EclipseLink, или DataNucleus ... и, поскольку они все с открытым исходным кодом, вы должны пойти и покопаться в их кодовой базе.
Можно ли получить доступ к SQL, который генерируется JPQL?
Вы можете получить доступ к SQL String
из спящего Interceptor
точнее из метода Interceptor.html#onPrepareStatement(java.lang.String)
onPrepareStatement
String onPrepareStatement (String sql) Вызывается, когда готовится строка sql. Параметры: sql - sql быть подготовленным Возвращает: оригинальный или модифицированный sql
Если вы решите пойти по этому пути, лучшим вариантом будет расширение EmptyInterceptor
и переопределить только те методы, которые вы хотите.
Вы можете подключить ваш перехватчик, используя следующую декларацию в вашем persistence.xml
:
<properties>
<property name="hibernate.ejb.interceptor" value="com.acme.MyInterceptor"/>
</properties>
Вы можете установить hibernate.show_sql
Если для свойства установлено значение true, то все SQL будут отображаться на консоли.
<property name="hibernate.show_sql">true</property>