一尘不染

如何拦截Hibernate生成的SQL?

hibernate

对于像老兄一样工作的安全系统(例如受监视的强制访问控制),我们必须拦截并处理hibernate生成的所有选择语句。我们将用户,时间戳和sql选择存储在数据库中,以使用其他工具进行某些性能分析。这些信息可以确定用户尝试查看的内容。对于选择语句,准备好的属性很有价值。我们需要完整的SQL语句,包括所有参数。

是否有任何侦听器或拦截器可以加入并处理所有这些事情?迄今为止最大的突出问题是语句参数的收集。

谢谢


阅读 662

收藏
2020-06-20

共1个答案

一尘不染

当org.hibernate包的日志记录级别设置为DEBUG,并且设置了hibernate.show_sql属性时,实际的参数值恰好变为可用(据我所知)。如果您希望记录器在数据库本身中输出,请使用JDBCAppender。

另外,您可以看一下log4jdbc项目,该项目要求以下内容:

在记录的输出中,对于准备好的语句,将绑定参数自动插入到SQL输出中。在许多情况下,这大大提高了可读性和调试能力。

如果不合适,您可以调查是否可以在您的情况下使用P6Spy。在WebLogic Server上,等效功能是通过WebLogic
JDBC
Spy实现的
,该工具随某些数据库的WebLogicJDBC驱动程序一起提供。这些都写到System.out而不是数据库(除非我弄错了),所以它可能没那么有用。

2020-06-20