是否可以访问由JPQL生成的SQL?
我想使用SQL稍后为我的目的创建一个视图。
如果重要的话,我正在使用Hibernate。
答案 0 :(得分:8)
是否可以访问由JPQL生成的SQL?
您可以从 Hibernate String
访问SQL Interceptor
,更准确地说是从方法Interceptor.html#onPrepareStatement(java.lang.String)
onPrepareStatement
String onPrepareStatement(String sql) Called when sql string is being prepared. Parameters: sql - sql to be prepared Returns: original or modified sql
如果您决定采用这种方式,最好的方法是扩展EmptyInterceptor
并仅覆盖您想要的方法。
您可以使用persistence.xml
中的以下声明来挂钩拦截器:
<properties>
<property name="hibernate.ejb.interceptor" value="com.acme.MyInterceptor"/>
</properties>
答案 1 :(得分:3)
您可以将hibernate.show_sql
属性设置为true,然后所有SQL都将显示在控制台上。
<property name="hibernate.show_sql">true</property>
答案 2 :(得分:1)
所以你需要编写自己的JPQL实现然后:-)毕竟,将JPQL转换为SQL用于RDBMS数据存储是JPQL实现的。祝你好运!
当然,您可以使用现有的JPQL实现,无论是Hibernate,还是EclipseLink,还是DataNucleus ......并且由于它们都是开源的,您应该去挖掘它们的代码库。