如何拦截Hibernate生成的SQL?

Chr*_*wes 6 java hibernate

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

是否有任何监听器或拦截器可以加入并处理所有这些事情?到目前为止,最大的突出问题是收集语句参数.

谢谢

Vin*_*lds 3

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

或者,您可以查看log4jdbc 项目,该项目声明如下:

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

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