繁体   English   中英

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

[英]JPA: how do you get/print the JPQL query string behind a (typed) query after parameters have been set?

你如何/打印一个(类型)查询背后的JPQL查询字符串,即参数设定 (例如用于调试目的)

一个简单的toString()似乎没有做到这一点......

谢谢

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

我知道这是旧的,但目前的答案并没有完全回答原始/根本问题。

我相信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>]

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

    <subsystem xmlns="urn:jboss:domain:logging:3.0">
        <console-handler name="CONSOLE">
            <level name="INFO"/>
            <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="INFO"/>
            <handlers>
                <handler name="CONSOLE"/>
            </handlers>
        </root-logger>
        <formatter name="PATTERN">

默认级别为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,现在你的控制台充满了喋喋不休。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM