tp 网站建设源码,网站 前台 后台,做php网站会员开店代码如何编写,app网站建设需要什么软件hibernate 调试Hibernate为何在程序的哪个部分以及在哪个部分中生成给定SQL查询并不总是立即的#xff0c;尤其是当我们处理的是我们自己编写的代码时。 这篇文章将介绍如何配置Hibernate查询日志记录#xff0c;并将其与其他技巧一起使用#xff0c;以找出在程序中执行给定… hibernate 调试 Hibernate为何在程序的哪个部分以及在哪个部分中生成给定SQL查询并不总是立即的尤其是当我们处理的是我们自己编写的代码时。 这篇文章将介绍如何配置Hibernate查询日志记录并将其与其他技巧一起使用以找出在程序中执行给定查询的原因和位置。 Hibernate查询日志是什么样的 Hibernate具有内置的查询日志如下所示 select /* load your.package.Employee */ this_.code, ...
from employee this_
where this_.employee_id?TRACE 12-04-201416:06:02 BasicBinder - binding parameter [1] as [NUMBER] - 1000Hibernate为什么无法记录实际查询 注意Hibernate记录的是Hibernate发送到JDBC驱动程序的准备好的语句及其参数。 准备好的陈述有? 在准备好的语句下面将代替查询参数记录参数值本身。 这与发送到数据库的实际查询不同因为Hibernate无法记录实际查询。 原因是Hibernate只知道准备好的语句以及它发送给JDBC驱动程序的参数而驱动程序将构建实际的查询然后将其发送到数据库。 为了使用实际查询生成日志需要使用log4jdbc之类的工具该工具将是另一篇文章的主题。 如何找出查询的来源 上面记录的查询包含一个注释该注释可以在大多数情况下标识查询的来源如果查询是由于按ID加载而引起的则注释为/* load your.entity.Name */ 如果它是命名查询则注释将包含查询的名称。 如果是一对多的延迟初始化则注释将包含类的名称和触发它的属性等等。 设置Hibernate查询日志 为了获得查询日志需要在会话工厂的配置中设置以下标志 bean id entityManagerFactory classorg.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean ...property namejpaProperties propsprop keyhibernate.show_sql true/ propprop keyhibernate.format_sql true/ propprop keyhibernate.use_sql_commentstrue/prop/props
/property 上面的示例用于实体管理器工厂的Spring配置。 这是标志的含义 show_sql启用查询日志记录 format_sql漂亮打印SQL use_sql_comments添加了说明性注释 为了记录查询参数需要以下log4j或等效信息 logger nameorg.hibernate.typelevel valuetrace /
/logger 如果一切都失败了 在许多情况下 use_sql_comments创建的注释足以识别查询的来源。 如果这还不够那么我们可以根据所涉及的表名从查询返回的实体开始然后在返回的实体的构造函数中放置一个断点。 如果实体没有构造函数那么我们可以创建一个构造函数并将断点放在对super()的调用中 Entity
public class Employee {public Employee() {super(); // put the breakpoint here}...
} 遇到断点时请转到包含程序的堆栈调用的IDE调试视图并从上至下进行遍历。 在程序中进行查询的位置将在调用堆栈中。 翻译自: https://www.javacodegeeks.com/2014/06/hibernate-debugging-finding-the-origin-of-a-query.htmlhibernate 调试