JPA:如何在设置参数后获取/打印(类型化)查询后面的JPQL查询字符串?

时间:2011-10-10 12:02:24

标签: java debugging jpa jpql

如何在(类型化)查询后面获取/打印JPQL查询字符串,即在参数设置后? (例如,用于调试目的)

一个简单的toString()似乎无法解决问题......

由于

3 个答案:

答案 0 :(得分:5)

没有“最终的JPQL最终被转换为最终的SQL”。 JPA实现如何生成SQL取决于它,一般参数永远不会被替换为任何String。 SQL是从表达式树等生成的,而不是String。如果你想插入param值然后自己做,因为它只对你有意义

答案 1 :(得分:1)

我知道这已经过时了,但目前的答案并没有完全回答原始/根问题。

我相信Kawu正在寻找JPQL字符串的样子,而不是它是否转换为SQL。欲望是找到具体的参数。

无论如何Kawu,我一直在寻找相同的东西,因为我的查询结果是偏斜的,我无法分辨参数是什么。我发现将以下代码添加到persistence.xml就可以了。我使用EclipseLink,但我确信其他JPA实现有类似的东西:

<property name="eclipselink.logging.level" value="FINE"/>

这将在您的服务器日志中显示以下内容:

[EL Fine]: sql: 2016-10-24 16:02:08.577--ServerSession(13483501)--Connection(6214343)--Thread(Thread[27010968@qtp-10395070-0,5,main])--SELECT ID, Name FROM Test WHERE (ID = ?)
    bind => [<your parameter shows here>]

答案 2 :(得分:0)

对于JBoss用户:在standalone.xml中进行更改。在该文件中,您将在&lt; profile&gt;下找到一个日志记录部分,例如:

    <subsystem xmlns="urn:jboss:domain:logging:3.0">
        <console-handler name="CONSOLE">
            <level name="DEBUG"/>
            <formatter>
                <named-formatter name="COLOR-PATTERN"/>
            </formatter>
        </console-handler>
        <logger category="com.arjuna">
            <level name="WARN"/>
        </logger>
        <logger category="org.jboss.as.config">
            <level name="DEBUG"/>
        </logger>
        <logger category="sun.rmi">
            <level name="WARN"/>
        </logger>
        <root-logger>
            <level name="DEBUG"/>
            <handlers>
                <handler name="CONSOLE"/>
            </handlers>
        </root-logger>
        <formatter name="PATTERN">

默认级别为INFO。要显示查询等,请在两个位置将级别更改为DEBUG,如:

USE INDEX

重新启动JBoss,现在你的控制台充满了喋喋不休。