休眠陷阱

我已经使用Hibernate已有一段时间了,当我一段时间不使用Hibernate项目时,发现自己犯的错误与上次相同。

因此,这是我的监视清单,希望对其他人也有用。

实现hashCode和equals

一般而言,应该始终实现这些方法,但对于实体,应该多加注意。当我说等于时,您想到的第一件事可能是使用Id来区分实例。 好吧,那会给您带来很多麻烦。
您需要记住,您正在使用数据库实体而不是普通的POJO。

当Hibernate提取对象时,您将使用collections,因此使用equals和hashCode来知道您要查找的对象是否在会话中。 对于新对象,id将为null或0。
这意味着当试图保存两个相同类的对象时,第二个对象将覆盖第一个对象。
同样,当休眠保存新实例时,它将设置id,从而使它成为完全相同的不同对象。 您需要使用一些业务密钥。 唯一的代码很棒,但是如果您什么都想不起,只需使用一个有意义的字段和一些时间戳(例如创建日期)即可使其唯一。

如果您想进一步了解正在发生的事情, 这是一个很好的参考。

小心一对一和多对一关系

这是您真正需要知道的。
在关系的“一对一”侧将关系映射为一对一或多对一时, 除非将字段指定为不可为空,否则您 不能延迟加载
这是为什么?

本质上,在关系的许多方面,hibernate可以使用集合代理,并在需要时延迟加载实例。 在“一个”一侧,没有集合接口,而是对您的一个模型类的引用。

Hibernate也可以代理该代理,但前提是必须确保引用永远不会为空!
因此,请记住,如果要进行延迟加载,请在一侧与延迟注释(或xml等效项)一起使用not null。
如果您的关系可以为空,但是您仍然真的想使其变得懒惰,那么您可以使用以下选择:

  • 创建一个值来表示该值。 例如,如果您具有诸如Person-& gtPartner之类的关系,则仅使用特定的Partner实例,即“无合作伙伴”。
  • 使用构建时间检测。 检查一下
  • 使用列表伪造一侧并使用get(0)获取字段

有关休眠文档的信息 。

启用语句记录

这是验证Hibernate确实在按预期执行的唯一方法。 幸运的是,您可以使用不同的日志记录参数来找出HQL或SQL级别正在发生的事情。 您会惊讶于休眠状态运行查询的次数,而您没有看到它。 从一开始就尝试执行此操作,并帮助团队了解拥有最佳和最少查询的重要性,否则当您在某些实际数据上运行应用程序时,肯定会遇到性能问题。 要启用日志记录,只需在会话配置文件中设置此属性

hibernate.show_sql=true

如果要查看格式正确的添加

hibernate.format_sql=true

观察toString方法中的内容。

这又与Hibernate在没有真正意识到的情况下为您获取的内容有关。 很多时候,当您看到查询但无法弄清为什么要加载一些惰性列表时,请检查toString方法。
可能是罪魁祸首!

您的休眠陷阱是什么?

参考: Hibernate陷阱! 来自我们的JCG合作伙伴在发展中博客上的 报道 。

相关文章 :
  • 休眠自动提交命令强制MySQL在过多的磁盘I / O中运行
  • DataNucleus 3.0与Hibernate 3.5
  • Hibernate映射集合性能问题
  • Spring MVC3 Hibernate CRUD示例应用程序

翻译自: https://www.javacodegeeks.com/2011/08/hibernate-gotchas-to-watch-out.html

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

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

相关文章

HDU 5371 Hotaru's problem (Manacher,回文串)

题意:给一个序列,找出1个连续子序列,将其平分成前,中,后等长的3段子序列,要求【前】和【中】是回文,【中】和【后】是回文。求3段最长为多少?由于平分的关系,所以答案应该…

bash 与 dash

Ubuntu 的 bash和dash的区别 什么是bash ? Bash(GNU Bourne-Again Shell)是许多Linux平台的内定Shell,事实上,还有许多传统UNIX上用的Shell,像tcsh、csh、ash、bsh、ksh等 等,Shell Script大致都类同,当您学…

350. 两个数组的交集 II

给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。 来源&a…

Eclipse:如何附加Java源代码

在Eclipse中,当您按Ctrl按钮并单击任何类名称时,IDE会将您带到该类的源文件。 这是项目中具有的类的正常行为。 但是,如果您也希望Java核心类具有相同的行为,则可以通过将Java源代码附加到Eclipse IDE来实现。 一旦附加了源代码&a…

【树状数组】

问题的提出:是否可以用线性数据结构的方法解决动态统计子树权和的问题呢? 有的,树状数组。 假设当前数组为a[],元素个数为n。 1. 子区间的权和数组为sum,那么数组a[]中 i 到 j这段区间的数组元素和为sum[i,j] a[k]的累…

2013VS快捷键

VS2013常用快捷键: 1.回到上一个光标位置/前进到下一个光标位置 1)回到上一个光标位置:使用组合键“Ctrl -”; 2)前进到下一个光标位置:“Ctrl Shift - ”。 2.复制/剪切/删除整行代码 1)如果…

GWT,GWT-Ext(SmartGWT),GXT(Ext GWT)常见任务

我在我们的JCG合作伙伴之一UI-Programming博客上浏览了一些旧文章,并注意到有很多简短的文章,介绍了如何使用GWT,GWT-Ext(SmartGWT)和GXT(Ext GWT)执行一些常见任务。 )。 我相信它们…

h.264 去块滤波

块效应及其产生原因 我们在观看视频的时候,在运动剧烈的场景常能观察到图像出现小方块,小方块在边界处呈现不连续的效果(如下图),这种现象被称为块效应(blocking artifact)。 首先我们需要搞清楚…

android开发的知识点(一)

1.android中背景图的设置: 将背景图放入到项目中的res/drawable-hdpi或res/drawable-mdpi或res/drawable-xhdpi或res/drawable-xxhdpi等任一文件夹下。然后在layout的xml文件夹下使用android:background"drawable/背景图名",其中背景图必须是p…

566. 重塑矩阵

在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。 给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c &…

RabbitMQ播放模块! 构架

RabbitMQ提供了具有可预测且一致的吞吐量和延迟的高可用性,可伸缩和便携式消息系统。 RabbitMQ是AMQP (业务消息传递的开放标准)的领先实现 ,并且通过适配器支持XMPP,SMTP,STOMP和HTTP来进行轻量级Web消息传…

Cyclic Nacklace - HDU 3746(next求循环节)

题目大意:给你一些串,问如果想让这个串里面的循环节至少循环两次,需要添加几个字符(只能在最前面或者最后面添加)。比如ababc 需要添加5个就是添加ababc。 分析:其实字符串的长度len-next[len] 最小循环节…

Xuggler开发教程

大家好, 在这篇文章中,我想介绍JavaCodeGeeks上的一些很酷的新教程。 他们将讨论与Xuggler , FFmpeg和Wowza进行媒体(音频/视频)操纵的方式。 我将在这篇文章中跟踪所有相关的教程。 您可以通过查看Pat较早的关于使用…

739. 每日温度

请根据每日 气温 列表 temperatures ,请计算在每一天需要等几天才会有更高的温度。如果气温在这之后都不会升高,请在该位置用 0 来代替。 代码一 单调栈 class Solution {public int[] dailyTemperatures(int[] temperatures) {int length temperatur…

一个非常好的性格切割问题

结伙stackoverflow看到一道非常不错的问题。遂拿来分享之。 题目要求:我有一个非常长的字符串: String s1"This is my world. This has to be broken." 我要把上面的字符串打乱以固定的长度(比如10)使得输出为&#xff…

Cajo,用Java完成分布式计算的最简单方法

摘自Jonas Boner在2006年5月1日发布在TheServerSide.com上的文章“ Distributed Computing Easy”中的介绍部分: 分布式计算在企业应用程序开发世界中变得越来越重要。 如今,开发人员不断需要解决以下问题:如何通过将应用程序扩展到单个节点之…

Java中Integer.parseInt()用法

1.先看看该方法的实现 public static int parseInt(String s) throws NumberFormatException {return parseInt(s,10);}2.事实上他可以有两个参数, public static int parseInt(String s,int radix)意味着将字符串s按照radix进制转换成整数。太抽象了,…

关于maven相互依赖的工程部署问题

环境:win7 64位,myeclipse10.6,eclipse4.5,都配置了svn插件 问题描述:1、工程模块化之后都是通过pom配置model来关联的,svn提交之后,通过myeclipse的svn‘检出为项目’,依赖的子工程…

什么是JAR包?

jar包就是别人已经写好的一些类,然后将这些类进行打包,你可以将这些jar包引入你的项目中,然后就可以直接使用这些jar包中的类和属性了,这些jar包一般都会放在lib目录下的 转载于:https://www.cnblogs.com/wulianshang/p/5513474.h…

....

输入流和输出流相对于内存设备而言. 将外设中的数据读取到内存中:输入将内存的数写入到外设中:输出。 字符流的由来:其实就是:字节流读取文字字节数据后,不直接操作而是先查指定的编码表。获取对应的文字。在对这个文字进行操作。…