首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPA或查询拦截

JPA或查询拦截
EN

Stack Overflow用户
提问于 2011-06-20 14:50:50
回答 3查看 1.8K关注 0票数 1

如何拦截正在执行的查询?基本上,我必须截取通过EntityManger执行的每个查询,并将“原生”sql记录到应用服务器日志文件中进行分析?你能让我知道有什么方法可以在之前和之后介绍spect,这样我就可以记录查询和执行所花费的时间吗?

请记住,JPA引擎可以是hibernate或Open JPA,因此,不管JPA实现如何,在服务器端进行自省查询的通用方法是什么?

非常感谢您的帮助..

提前谢谢你,

Bhavesh

EN

回答 3

Stack Overflow用户

发布于 2011-06-20 17:16:31

如果你使用hibernate,你可以使用hibernate拦截器,这会拦截所有触发的查询。

Session s = sessionFactory.openSession(new MyInterceptor());

这样,从该会话对象触发的任何查询都将被截获,您可以随心所欲地调整查询,也可以一起停止查询。

或者,您可以记录对特定文件的所有查询(使用log4j)。这需要您在hibernate cfg文件中将show_sql设置为true。

票数 1
EN

Stack Overflow用户

发布于 2011-06-20 15:16:46

我在JPA规范中看不到任何关于调试/日志记录的东西,除了实现使用的外部属性需要使用它们自己的命名空间(例如com.hibernate.log)之外。

既然JPA提供者需要在persistence.xml中提及,你能不能不把特定于实现的属性放在同一个文件中(至少Hibernate是这样工作的)?

票数 0
EN

Stack Overflow用户

发布于 2011-06-20 19:29:43

每一个好的DBMS都应该提供(太长的)查询日志功能。

但是,如果你想继续使用Java,试着使用JDBC LoggerLog4JDBC。请记住,完整的查询日志记录可能会影响应用程序的性能,因此在生产中要小心。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6407732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档