捕获JBoss AS 7中hibernate JPA生成的最终SQL查询

ish*_*han 5 hibernate p6spy jpa-2.0 jboss7.x postgresql-9.2

我一直在努力在我的项目中捕获一个非常复杂的JPA查询的确切SQL以进行优化,但到目前为止我无法这样做.我尝试了以下方法:

1)通过在logback.xml中添加以下内容并启用show_SQL,尝试通过logback启用hibernate日志

    <logger name="org.hibernate.type" level="ALL" />
 <logger name="org.hibernate" level="TRACE">
    <appender-ref ref="fdpAdminAppender" />
 </logger>
Run Code Online (Sandbox Code Playgroud)

2)尝试使用P6spy-2驱动程序与Jboss AS7和postgres,但只是无法使其工作.它给出了以下例外.

com.p6spy.engine.spy.P6SpyDriver cannot be cast to javax.sql.XADataSource
Run Code Online (Sandbox Code Playgroud)

3)在JBoss AS 7中启用了内置数据源间谍,它确实有效.但是日志显示的数据太多,所有这些对我来说都是无用的,因为它们再次将值附加为"?".即使我可以在这里获得完整的SQL语句,我的问题也将得到解决.

到目前为止,我已经成功完成了第3步,但要么我错过了某些东西,要么就是这样,无论是哪种情况,我的实际目的都没有得到解决.所以请有人帮我从JPA获取实际的SQL查询.我并不关心如何得到它,我只需要得到它.我经历过需要在开发过程中多次验证JPA生成的实际SQL.很奇怪为什么没有标准的方法来做到这一点.

小智 6

只需在'persistence.xml'中添加以下内容:

<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
Run Code Online (Sandbox Code Playgroud)

确保将其放在<properties>标签内,如下所示:

<persistence>
    <persistence-unit>
        <properties>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
        </properties>
    </persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)

祝好运 :)