有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JPA或查询拦截

如何拦截正在执行的查询?基本上,我必须截取通过EntityManger执行的每个查询,并将“本机”sql记录到应用程序服务器日志文件中进行分析?您能告诉我是否有任何方法可以在查询之前和之后进行内省,以便我可以记录查询和执行所需的时间吗

请记住,JPA引擎可以是hibernate或Open JPA,所以不管JPA实现如何,在服务器端内省查询的一般方法是什么

非常感谢您的帮助

提前感谢,

巴维斯


共 (3) 个答案

  1. # 1 楼答案

    如果您使用的是hibernate,那么您可以使用hibernate拦截器,该拦截器将拦截所有触发的查询

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

    通过这种方式,将拦截从此会话对象激发的任何查询,您可以随意调整查询&;同时停止查询

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

  2. # 2 楼答案

    我在JPA规范中没有看到任何关于调试/记录的内容,除了实现使用的外部属性需要使用它们自己的名称空间(例如com.hibernate.log)

    因为在持久性中需要提到JPA提供者。xml,您能否将特定于实现的属性放在同一个文件中(至少Hibernate是这样工作的)

  3. # 3 楼答案

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

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