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