如何在(类型化)查询后面获取/打印JPQL查询字符串,即在参数设置后? (例如,用于调试目的)
一个简单的toString()
似乎无法解决问题......
由于
答案 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,现在你的控制台充满了喋喋不休。