5

是否可以访问 JPQL 生成的 SQL?

我想使用 SQL 稍后为我的目的创建一个视图。

如果重要的话,我正在使用 Hibernate。

4

3 回答 3

8

是否可以访问 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>
于 2010-09-11T05:58:08.347 回答
3

您可以将该hibernate.show_sql属性设置为 true,然后所有 SQL 将显示在控制台上。

<property name="hibernate.show_sql">true</property>
于 2010-03-02T23:51:10.387 回答
1

因此,您需要编写自己的 JPQL 实现 :-) 毕竟,将 JPQL 转换为用于 RDBMS 数据存储的 SQL 就是 JPQL 实现。祝你好运!

当然,您可以使用现有的 JPQL 实现,无论是 Hibernate、EclipseLink 还是 DataNucleus ......而且由于它们都是开源的,您应该去挖掘他们的代码库。

于 2010-03-03T06:35:18.477 回答