Java JPA:设置参数后,如何在(键入的)查询后面获取/打印JPQL查询字符串?

Java JPA:设置参数后,如何在(键入的)查询后面获取/打印JPQL查询字符串?,java,debugging,jpa,jpql,Java,Debugging,Jpa,Jpql,如何获取/打印(键入的)查询后面的JPQL查询字符串,即设置了参数后的?(例如,用于调试目的) 一个简单的toString()似乎不起作用 谢谢没有“最终被转换为最终SQL的最终JPQL”这样的东西。JPA实现如何生成SQL取决于它,一般来说,参数永远不会被替换为任何字符串。SQL是从表达式树等生成的,不是字符串。如果要插入参数值,请自己动手,因为这只对您有意义我知道这是旧的,但当前的答案并不完全回答原始/根问题 我相信Kawu是在寻找JPQL字符串的样子,而不是它是否转换为SQL。他们的愿望是

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

一个简单的
toString()
似乎不起作用


谢谢

没有“最终被转换为最终SQL的最终JPQL”这样的东西。JPA实现如何生成SQL取决于它,一般来说,参数永远不会被替换为任何字符串。SQL是从表达式树等生成的,不是字符串。如果要插入参数值,请自己动手,因为这只对您有意义

我知道这是旧的,但当前的答案并不完全回答原始/根问题

我相信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>]
sql:2016-10-24 16:02:08.577——服务器会话(13483501)——连接(6214343)——线程(Thread[27010968@qtp-10395070-0,5,main])——从测试中选择ID和名称,其中(ID=?) 绑定=>[]
对于JBoss用户:在standalone.xml中进行更改。在该文件中,您将在下面找到日志部分,例如:


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

    <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">


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

我早就料到了。。。我并没有询问显示提供者生成的SQL。为什么不定义输出的含义呢?设置参数与JPQL“字符串”表单无关。。。JPQL字符串形式中的参数是“:myParam”。我希望最终的JPQL被翻译成最终的SQL,包括设置/使用的具体参数。看起来你必须自己用string.replace来编译这个字符串?在任何情况下,不管JPA提供者如何在内部处理他们的东西,有时看到最终的查询是什么样子肯定会让人感兴趣。
    <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">