是否可以访问 JPQL 生成的 SQL?
我想使用 SQL 稍后为我的目的创建一个视图。
如果重要的话,我正在使用 Hibernate。
是否可以访问 JPQL 生成的 SQL?
String
您可以从HibernateInterceptor
访问 SQL ,更准确地说是从方法Interceptor.html#onPrepareStatement(java.lang.String)
onPrepareStatement
字符串onPrepareStatement(字符串 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>
因此,您需要编写自己的 JPQL 实现 :-) 毕竟,将 JPQL 转换为用于 RDBMS 数据存储的 SQL 就是 JPQL 实现。祝你好运!
当然,您可以使用现有的 JPQL 实现,无论是 Hibernate、EclipseLink 还是 DataNucleus ......而且由于它们都是开源的,您应该去挖掘他们的代码库。