如何拦截正在执行的查询?基本上,我必须截取通过EntityManger执行的每个查询,并将“原生”sql记录到应用服务器日志文件中进行分析?你能让我知道有什么方法可以在之前和之后介绍spect,这样我就可以记录查询和执行所花费的时间吗?
请记住,JPA引擎可以是hibernate或Open JPA,因此,不管JPA实现如何,在服务器端进行自省查询的通用方法是什么?
非常感谢您的帮助..
提前谢谢你,
Bhavesh
发布于 2011-06-20 17:16:31
如果你使用hibernate,你可以使用hibernate拦截器,这会拦截所有触发的查询。
Session s = sessionFactory.openSession(new MyInterceptor());
这样,从该会话对象触发的任何查询都将被截获,您可以随心所欲地调整查询,也可以一起停止查询。
或者,您可以记录对特定文件的所有查询(使用log4j)。这需要您在hibernate cfg文件中将show_sql设置为true。
发布于 2011-06-20 15:16:46
我在JPA规范中看不到任何关于调试/日志记录的东西,除了实现使用的外部属性需要使用它们自己的命名空间(例如com.hibernate.log)之外。
既然JPA提供者需要在persistence.xml中提及,你能不能不把特定于实现的属性放在同一个文件中(至少Hibernate是这样工作的)?
发布于 2011-06-20 19:29:43
每一个好的DBMS都应该提供(太长的)查询日志功能。
但是,如果你想继续使用Java,试着使用JDBC Logger或Log4JDBC。请记住,完整的查询日志记录可能会影响应用程序的性能,因此在生产中要小心。
https://stackoverflow.com/questions/6407732
复制相似问题