hibernate 调试_Hibernate调试–查找查询的来源

hibernate 调试

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

hibernate 调试

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

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

相关文章

Ubuntu终端多窗口分屏Terminator

1、安装 Terminator最大的特点就是可以在一个窗口中打开多个终端 sudo apt-get install terminator2、快捷键 F11 全屏 CtrlShiftE 垂直分割窗口 CtrlShiftO 水平分割窗口CtrlShiftC 复制 CtrlShiftV 粘贴CtrlTab 在分割的各窗口之间切换 CtrlShiftPageDown 在相邻的两个窗…

专业QA如何实施可靠的CI / CD管道?

过时的传统软件开发方法并不能接管不断升级的市场趋势&#xff0c;并且这些方法缺乏解决方案&#xff0c;这些解决方案无法满足引入“ 持续集成&#xff08;CI&#xff09;和持续交付&#xff08;CD&#xff09; ”的快速软件发布的日益增长的需求。 除CI / CD之外&#xff0c;…

C语言中的宏定义

简单宏定义 简单的宏定义有如下格式&#xff1a; [#define指令&#xff08;简单的宏&#xff09;]  #define 标识符替换列表替换列表是一系列的C语言记号&#xff0c;包括标识符、关键字、数、字符常量、字符串字面量、运算符和标点符号。当预处理器遇到一个宏定义时&…

solr analyzer_查看您的Solr缓存大小:Eclipse Memory Analyzer

solr analyzerSolr使用不同的缓存来防止请求期间过多的IO访问和计算。 如果索引不是很频繁发生&#xff0c;则可以通过使用这些缓存来获得巨大的性能提升。 根据索引数据的结构和缓存的大小&#xff0c;它们可能会变得很大&#xff0c;并占用堆内存的很大一部分。 在本文中&…

好用的电脑软件总结

一 科研 1 阅读软件 Citavi 文献阅读软件小绿鲸SCI 文献翻译软件文献翻译阅读软件 &#xff1a;Quicker沙拉查词 来自 https://mubu.com/doc/vWDgwhwdg0 注&#xff1a;沙拉查词可能出现翻译后仍然保持选中的状态&#xff0c;鼠标无法自由移动&#xff0c;针对这种情况&#…

笔记本启动与关闭自带键盘

Win S打开搜索界面 输入cmd 以管理员权限打开 执行以下命令 如果是关闭键盘 sc config i8042prt start disabled如果是开启键盘 sc config i8042prt startauto对应的注册表位置&#xff1a; [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt] "S…

lucene快速入门_为Lucene选择快速唯一标识符(UUID)

lucene快速入门大多数使用Apache Lucene的搜索应用程序都会为每个索引文档分配一个唯一的ID&#xff08;即主键&#xff09;。 尽管Lucene本身不需要这样做&#xff08;它可能不太在乎&#xff01;&#xff09;&#xff0c;但应用程序通常需要它以后通过其外部ID替换&#xff0…

vim字符串替换

vi/vim 中可以使用 &#x1f612; 命令来替换字符串。以前只会使用一种格式来全文替换&#xff0c;今天发现该命令有很多种写法(vi 真是强大啊&#xff0c;还有很多需要学习)&#xff0c;记录几种在此&#xff0c;方便以后查询。 替换    : s/vivian/sky/ 替换当前行第一个 v…

使用网真和WAD热部署Kubernetes

在Kubernetes环境中测试企业应用程序时&#xff0c;更改&#xff0c;重新打包和重新部署应用程序的周转可能变得非常高。 网真旨在通过将本地运行的进程代理到我们的Kubernetes集群中来减轻这种情况&#xff0c;就像本地进程是集群的一部分一样。 如果我们将这种方法与诸如WAD之…

git clone 项目出现 Failed to connect to github.com port 443: Timed out

将命令号中的https 改为git 就可以解决这个问题的出现

使用eclipse调试ns3-配置说明

Tips&#xff1a; 1&#xff0c; 安装eclipse时注意选择C开发组件&#xff1b; 环境配置参考&#xff1a;https://www.cnblogs.com/zlcxbb/p/3852810.html 第一步&#xff0c;新建C工程&#xff1b; 第二步&#xff0c;在project explorer中右键属性&#xff0c;如下图&#…

singleton 类_在Java中对Singleton类进行双重检查锁定

singleton 类Singleton类在Java开发人员中非常常见&#xff0c;但是它给初级开发人员带来了许多挑战。 他们面临的主要挑战之一是如何使Singleton保持为Singleton&#xff1f; 也就是说&#xff0c;无论出于何种原因&#xff0c;如何防止单个实例的多个实例。 对Singleton进行双…

将 Citavi 笔记按需要导出

文章目录简要介绍导出某一条笔记导出按条件筛选的一类笔记导出某一篇 PDF 的笔记导出全部笔记简要介绍 Citavi 的笔记功能相比其他文献管理软件较为完善&#xff0c;对 PDF 的标注是一种双链标注&#xff0c;阅读论文更方便&#xff0c;这也是当下很多笔记软件在做的功能之一&…

反应型关系数据库事务

Spring Framework最近宣布将提供对反应式事务管理的支持 。 让我们深入研究它对R2DBC&#xff08;SQL数据库访问的反应式规范&#xff09;如何工作。 事务管理是一种模式&#xff0c;而不是特定于技术的。 从这个角度来看&#xff0c;它的属性和运行时行为是实现技术的功能。…

Ubuntu20.04 服务器版安装

本篇文章是实验室服务器安装系统的总结安装总结。 1 安装的前提是具有安装启动盘&#xff0c;下载最新的Ubuntu 20.04服务器版本系统&#xff0c;制作成可启动的USB驱动器。 不同品牌的电脑安装系统的启动键不同&#xff0c;需自行百度一下自己要装的计算机的启动键。 1 进入引…

Window10:不能建立到远程计算机的连接。你可能需要更改此连接的网络设置。

解决步骤&#xff1a; 第一步&#xff1a;在桌面找到此电脑&#xff0c;鼠标右键点击&#xff0c;选择管理 第二步&#xff1a;进入计算机管理界面 第三步&#xff1a;点击设备管理器-再点击网络适配器 第四步&#xff1a;卸载WAN MIniport&#xff08;ip) 重启电脑。重新拨号&…

java默认代码地址_Java 8默认方法可能会破坏您的(用户)代码

java默认代码地址乍一看&#xff0c; 默认方法为Java虚拟机的指令集带来了一个很棒的新功能。 最后&#xff0c;库开发人员能够开发已建立的API&#xff0c;而不会对其用户代码造成不兼容性。 使用默认方法&#xff0c;当将新方法引入该接口时&#xff0c;任何实现库接口的用户…

C盘爆红的解决方法

C盘爆红的原因 1. 系统存在的过多功能 2. 安装的软件占用 3. 聊天软件文件占用 4. 临时文件占用 5. 软件缓存占用 针对不同的原因进行处理 一.关闭不用的系统功能 1. 从1903版本开始,win10 C盘就有~7G的保留空间占用&#xff1b; 提供dism命令关闭方法&#xff0c;命令…

Apache Camel 3 –骆驼核心vs骆驼核心引擎(较小的核心)

Camel团队目前正在忙于Apache Camel 3的开发。已经完成了许多工作&#xff0c;到目前为止&#xff0c;我们已经发布了3个里程碑版本。 下一个里程碑版本4具有一些出色的创新功能&#xff0c;这些功能我将在接下来的几个月中发布。 该博客的主题是我们在将骆驼核拆分成较小的模…