休眠调试–查找查询的来源

Hibernate为什么在程序的哪个部分以及在哪个部分中生成给定的SQL查询并不总是立即的,尤其是当我们处理的是我们自己编写的代码时。

这篇文章将介绍如何配置Hibernate查询日志记录,并将其与其他技巧一起使用,以找出在程序中执行给定查询的原因和位置。

Hibernate查询日志是什么样的

Hibernate具有内置的查询日志,如下所示:

select /* load your.package.Employee */ this_.code, ... 
from employee this_ 
where this_.employee_id=?TRACE 12-04-2014@16:06:02  BasicBinder - binding parameter [1] as [NUMBER] - 1000

Hibernate为什么无法记录实际查询?

注意,Hibernate记录的是Hibernate发送到JDBC驱动程序的准备好的语句及其参数。 准备好的语句有? 在准备好的语句之后,将代替查询参数记录参数值本身。

这与发送到数据库的实际查询不同,因为Hibernate无法记录实际查询。 原因是Hibernate只知道准备好的语句和它发送给JDBC驱动程序的参数,而驱动程序将构建实际的查询,然后将其发送到数据库。

为了使用实际查询生成日志,需要使用log4jdbc之类的工具,该工具将是另一篇文章的主题。

如何找出查询的来源

上面记录的查询包含一个注释,该注释可以在大多数情况下标识查询的起源:如果查询是由于按ID加载而引起的,则注释为/* load your.entity.Name */ ,如果它是命名查询,则注释将包含查询的名称。

如果是一对多的延迟初始化,则注释将包含类的名称和触发它的属性,等等。

设置Hibernate查询日志

为了获取查询日志,需要在会话工厂的配置中设置以下标志:

<bean id= "entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" >...<property name="jpaProperties" ><props><prop key="hibernate.show_sql" >true</ prop><prop key="hibernate.format_sql" >true</ prop><prop key="hibernate.use_sql_comments">true</prop></props>
</property>

上面的示例用于实体管理器工厂的Spring配置。 这是标志的含义:

  • show_sql启用查询日志记录
  • format_sql漂亮打印SQL
  • use_sql_comments添加了说明性注释

为了记录查询参数,需要以下log4j或等效信息:

<logger name="org.hibernate.type"><level value="trace" />
</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.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363731.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java各种对象(PO,BO,VO,DTO,POJO,DAO,Entity,JavaBean,JavaBeans)的区分

PO&#xff1a;持久对象 (persistent object)&#xff0c;po(persistent object)就是在Object/Relation Mapping框架中的Entity&#xff0c;po的每个属性基本上都对应数据库表里面的某个字段。完全是一个符合Java Bean规范的纯Java对象&#xff0c;没有增加别的属性和方法。持久…

REMBER

第一句如果我们之间有1000步的距离 你只要跨出第1步我就会朝你的方向走其余的999步 第二句通常愿意留下来跟你争吵的人 才是真正爱你的人第三句付出真心 才会得到真心 却也可能伤得彻底保持距离 就能保护自己 却也注定永远寂寞第四句有时候 不是对方不在乎你 而是你把对…

android 获取程序,Android获取桌面应用程序

转载请注明出处&#xff0c;谢谢&#xff1a;http://blog.csdn.net/harryweasley/article/details/50057029首先在看这个博客之前&#xff0c; 你可以先看下这个博客&#xff0c;http://blog.csdn.net/harryweasley/article/details/50057707里面介绍了两种方式来获取应用程序的…

等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规

随着等保 2.0 时代的到来&#xff0c;网络安全要求更加严格&#xff0c;应用场景更加丰富&#xff0c;等级保护已成为互联网企业义不容辞的责任。作为国内移动安全领域的技术创新企业&#xff0c;几维安全在积极响应等保2.0时代的战略布局&#xff0c;推出等保2.0检测、等保加固…

js中什么是对象,对象的概念是什么?

我们一直在用对象 可是你真的理解对象吗&#xff0c;js中有一个说法是一切皆对象&#xff0c;其实这里说的应该是 一切皆可看作对象 对象就是可以拥有属性和方法的一个集合 士兵就是一个对象&#xff0c;它拥有身高体重的属性&#xff0c;保家卫国&#xff0c;吃饭睡觉的动作方…

在Spring启动时与mongodb一起摇摆

我是Spring Boot的粉丝&#xff0c;这是Spring Boot上的mongodb示例项目。 大多数mongodb示例项目是如此基础&#xff0c;以至于您不会太过分。 您可以搜索普通的Spring Data示例&#xff0c;但是它们可能比您想要的复杂得多。 所以这是我的。 这是我要使用的pom。 <!--?…

android git上传出现错误,热更新上传patch包时提示上传失败,文件不合法

集成配置信息classpath com.android.tools.build:gradle:3.3.2classpath "com.tencent.bugly:tinker-support:1.1.5"distributionUrlhttps://services.gradle.org/distributions/gradle-5.0-all.zipapi com.tencent.bugly:crashreport_upgrade:1.3.6api com.tencent.…

第一章笔记(chapter 1 note

犯错对编程而言非常有教育性. 早期犯的错误越多, 学到的东西就越多.编辑器是提供了编写, 管理, 开发与测试程序的环境, 有时也称为集成开发环境(Integrated Development Environment, IDE).任何环境及任何语言中, 开发程序的编辑, 编译, 链接与执行这四个步骤都是一样的.犯错乃…

又做了3个极品菜[图]

今天的是&#xff1a; 极品豆角炒鸡蛋 极品黄瓜炒鸡蛋 极品炒菠菜没鸡蛋 其他我做的菜请看 《我做的菜很香很好吃[有图]》 转载于:https://www.cnblogs.com/zjneter/archive/2008/04/13/1151383.html

生成器与迭代器

生成器与迭代器一、生成器 1.列表推导式 列表推导式是Python内置的非常简单且强大的可以用来轻松创建列表的方法。它可以使用非常简单的语句利用其他列表创建新的列表。 例如&#xff0c;创建1到10的所有偶数的平方的列表&#xff1a; list [i*i for i in range(1,11) if i%20…

Spring Integration Java DSL示例

现在已经为Spring Integration引入了新的基于Java的DSL &#xff0c;这使得可以使用基于纯Java的配置而不是基于Spring XML的配置来定义Spring Integration消息流。 我尝试使用DSL来获得示例集成流–我称其为Rube Goldberg流 &#xff0c;因为它在尝试大写作为输入传递的字符串…

automake linux,Linux下automake软件编译与发布快速入门

Linux下automake软件编译与发布快速入门2008-04-22eNet&Ciweek进入编辑界面&#xff0c;输入内容如下&#xff1a;AUTOMAKE_OPTIONSforeignbin_PROGRAMSsimserver1 #软件包名称simserver1_SOURCESsimserver1.cpp  #源文件列表&#xff0c;如果有多个则用空格分开LIBS -l…

取消 Vue 中格式编译警告

使用VS Code在学习 Vue 的过程中&#xff0c;博主是在2.0之后开始学习的&#xff0c;在写项目的时候发现控制台经常会报一大堆的警告&#xff0c;都是关于格式的&#xff0c;有时候少空格&#xff0c;有时候多空格&#xff0c;不胜其烦&#xff0c;出现这个问题是因为在初始化的…

常用激活函数(激励函数)理解与总结

转载自https://blog.csdn.net/tyhj_sf/article/details/79932893 什么是激活函数&#xff1f; 神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值&#xff0c;并将输入值传递给下一层&#xff0c;输入层神经元节点会将输入属性值直接传递给下一层&#…

[原创]水知道答案吗?(一)

《水知道答案》是一本书的名字&#xff0c;我很有兴趣重复其中的试验&#xff0c;验证其真伪。书中提到的众多试验中&#xff0c;有一个试验最好做。实验内容&#xff1a;初始条件&#xff1a;取三个杯子&#xff0c;倒上相同水源的水&#xff0c;然后每个杯子放进一粒米饭粒。…

html5标签的兼容性处理

HTML5的语义化标签以及属性   1.可以让开发者非常方便地实现清晰的web页面布局&#xff0c;加上CSS3的效果渲染&#xff0c;快速建立丰富灵活的web页面显得非常简单 2.使用他们能让代码语义化更直观,而且更方便SEO优化。 但是此HTML5新标签在IE6/IE7/IE8上并不能识别&#xf…

Spring Security配置错误

我最近看到Mike Wienser的SpringOne2GX谈论了Application Security Pitfalls 。 如果您在Servlet容器上使用Spring的堆栈&#xff0c;这将非常有用&#xff0c;值得一看。 它使我想起了我曾经面临的一个严重的Spring Security Misconfiguration。 在Spring的指导项目Securing …

android fragmentactivity fragment,Android:Activity与Fragment通信(99%)完美解决方案

前言最近一直在想着能否有一种更好的方案来解决&#xff1a;Android中Activity与Fragment之间通信的问题&#xff0c;什么叫更好呢&#xff0c;就是能让Fragment的复用性高&#xff0c;性能还有好(不用反射)&#xff0c;代码还要好维护&#xff0c;不需要为每对Activity和Fragm…

分布式人工智能标记语言(DAIML)示例

DAIML&#xff08;Distributed Artificial Intelligence Markup Language&#xff09;是用于分布式人工智能系统中智能语言的标记库。DAIML主要分为Pattern和Template两部分&#xff0c;Pattern用于模式匹配&#xff0c;Template用于回答模板&#xff0c;下面将分别介绍两者的示…

Ext.js数据展示问题name展示code

出现以上问题是因为model中定义的类型跟数据库不匹配 去掉js中vehicleModel的type或者改为type:int即可。转载于:https://www.cnblogs.com/feifeicui/p/10438900.html