从Hibernate查询中获取SQL String

dim*_*uta 11 string hibernate java-ee

我需要从Hibernate查询中获取字符串并稍后处理它(所以我无法解决它"hibernate.show_sql").

我已经看过如何从Hibernate Criteria API获取SQL(*不*用于日志记录)但是使用该解决方法我得到了SQL查询字符串但是没有显示它显示的参数值'?'...有什么方法可以获取带参数值的完整SQL字符串?

我的意思是,有了这个解决方案,我得到"SELECT * FROM USER WHERE NAME=? AND SURNAME=?"但是我需要"SELECT * FROM USER WHERE NAME='John' AND SURNAME='Doe'"......

想法?

jel*_*ies 8

您必须设置TRACE此hibernate包的日志记录级别,并且参数绑定应显示在您的应用程序日志中:

<category name="org.hibernate.type">
      <priority value="TRACE"/>
</category>
Run Code Online (Sandbox Code Playgroud)

输出示例:

13:58:51,505 DEBUG [SQL] 
 insert 
        into
            s.audit
            (action, e_s, ip, time, userid, id) 
        values
            (?, ?, ?, ?, ?, ?)
13:58:51,505 TRACE [StringType] binding 'Modify user' to parameter: 1
13:58:51,505 TRACE [StringType] binding 'E' to parameter: 2
13:58:51,505 TRACE [StringType] binding '164.20.81.65' to parameter: 3
13:58:51,505 TRACE [TimestampType] binding '2012-07-30 13:58:51' to parameter: 4
13:58:51,505 TRACE [IntegerType] binding '158' to parameter: 5
13:58:51,505 TRACE [IntegerType] binding '8851' to parameter: 6
Run Code Online (Sandbox Code Playgroud)

并且不要忘记'hibernate.show_sql=true'您之前说过的属性也显示相关的SQL.


sor*_*ito 1

有一个名为p6spy的工具。它有点旧了,恐怕不再维护了。无论如何,它过去给了我很好的结果。

编辑:刚刚发现它再次被积极开发。对我来说就像一个魅力!