Java JPA或查询拦截
如何拦截正在执行的查询?基本上,我必须截取通过EntityManger执行的每个查询,并将“本机”sql记录到应用程序服务器日志文件中进行分析?您能告诉我是否有任何方法可以在查询之前和之后进行内省,以便我可以记录查询和执行所需的时间吗 请记住,JPA引擎可以是hibernate或Open JPA,所以不管JPA实现如何,在服务器端内省查询的一般方法是什么 非常感谢您的帮助 提前感谢,Java JPA或查询拦截,java,hibernate,jpa,Java,Hibernate,Jpa,如何拦截正在执行的查询?基本上,我必须截取通过EntityManger执行的每个查询,并将“本机”sql记录到应用程序服务器日志文件中进行分析?您能告诉我是否有任何方法可以在查询之前和之后进行内省,以便我可以记录查询和执行所需的时间吗 请记住,JPA引擎可以是hibernate或Open JPA,所以不管JPA实现如何,在服务器端内省查询的一般方法是什么 非常感谢您的帮助 提前感谢, Bhavesh除了实现使用的外部属性需要使用自己的名称空间(例如com.hibernate.log)之外,我在J
Bhavesh除了实现使用的外部属性需要使用自己的名称空间(例如com.hibernate.log)之外,我在JPA规范中没有看到任何关于调试/记录的内容
由于需要在persistence.xml中提到JPA提供程序,您能否将特定于实现的属性放在同一个文件中(至少Hibernate是这样工作的)?除了实现使用的外部属性需要使用自己的名称空间(例如com.hibernate.log)之外,我在JPA规范中没有看到任何关于调试/记录的内容
由于需要在persistence.xml中提及JPA提供程序,您能否将特定于实现的属性放在同一个文件中(至少这是Hibernate的工作方式)?如果您使用Hibernate,您可以使用Hibernate拦截器,这将拦截所有触发的查询 会话s=sessionFactory.openSession(新的MyInterceptor())代码> 通过这种方式,将拦截从此会话对象激发的任何查询,您可以随意调整查询,也可以同时停止查询 或者,您可以记录特定文件的所有查询(使用log4j)。
这要求您在hibernate cfg文件中将
show_sql
设置为true。如果您使用hibernate,您可以使用hibernate拦截器,这将拦截所有触发的查询
会话s=sessionFactory.openSession(新的MyInterceptor())代码>
通过这种方式,将拦截从此会话对象激发的任何查询,您可以随意调整查询,也可以同时停止查询
或者,您可以记录特定文件的所有查询(使用log4j)。
这要求您在hibernate cfg文件中将
show_sql
设置为true。每个好的DBMS都应该提供(太长)查询日志记录功能
但是,如果您想继续使用Java,请尝试使用或。
请记住,完整的查询日志记录可能会影响应用程序的性能,所以在生产过程中要小心操作。每个好的DBMS都应该提供(太长的)查询日志记录功能 但是,如果您想继续使用Java,请尝试使用或。
请记住,完整的查询日志记录可能会影响应用程序的性能,所以请在生产中小心操作。没有通用的方法。任何像样的JPA实现都应该能够记录查询、生成的任何SQL以及执行它所花费的时间。DataNucleus当然会这样做。这不是通用的方法。任何像样的JPA实现都应该能够记录查询、生成的任何SQL以及执行它所花费的时间。DataNucleus当然有