Hibernate陷阱

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

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

实现hashCode和equals

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

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

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

小心一对一和多对一关系

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

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

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

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

有关Hibernate文档的信息 。

启用语句记录

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

hibernate.show_sql=true

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

hibernate.format_sql=true

观察toString方法中的内容。

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

您的Hibernate陷阱是什么?

参考: Hibernate陷阱! 来自我们的JCG合作伙伴 在进行中的开发博客中 。

相关文章 :
  • Hibernate自动提交命令强制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/359976.shtml

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

相关文章

字符集_第07期:有关 MySQL 字符集的 SQL 语句

本篇为理清字符集的续篇(上一篇:第06期:梳理 MySQL 字符集的相关概念),重点讲述字符集涉及到的 sql 语句用法。一、character introducer翻译过来就是字符引导。也就是针对字符串,显式的给定一个字符编码和排序规则,不…

c语言main函数的参数argc,argv说明

main函数参数argc,argv说明 C/C语言中的main函数,经常带有参数argc,argv,如下: int main(int argc, char** argv) int main(int argc, char* argv[]) 这两个参数的作用: argc 是指命令行输入参数的个数(以空白符分隔)…

怎么调整计算机显示屏,电脑显示器怎样调大屏幕

电脑显示器怎样调大屏幕你们知道怎么调整电脑显示器的屏幕吗?下面是应届毕业生小编带来的关于电脑显示器怎样调大屏幕的内容,欢迎阅读!电脑显示器怎样调大屏幕?以前的xp系统是在桌面点击右键然后选择属性,在属性里设置分辨率的。而win7则有点不同&…

使用jstat报告自定义JVM指标集

我一直缺少在JStat中配置自定义标头的可能性 。 当然,有很多预定义的数据集,但是如果我们可以创建自己的数据集,那就更好了。 正如您可能已经设计的那样,我正在写这篇文章,因为这样的功能当然可用:)不幸的是…

XP退役对整个互联网安全的问题

如果你的电脑还是XP,那么请你看看我写的内容吧。 4月8好微软结束支持之后依然可以运行XP和office2003,但是会带来潜在风险,首先为安全性和合规性分析,比如黑客攻击;其次为缺少软硬件支持,许多电脑硬件和…

python在线教育平台项目面试_【松勤软件自动化测试】selenium+python面试题目总结...

1. WebDriver原理webDriver是按照client/server模式设计,client就是我们的测试代码,发送请求,server就是打开的浏览器来打开client发出的请求并做出响应。具体的工作流程:webdriver打开浏览器并绑定到指定端口。启动的浏览器作为r…

win7打开计算机死机,win7系统进入桌面总是死机或者卡死怎么办

??最近有位深度技术win7旗舰版用户的电脑总是在进入桌面的时候莫名其妙的死机或者卡死,遇到这种情况我们应该怎么办呢?我们可以通重启资源管理器来解决屏幕卡死的问题,首先我们要打开任务管理器,下面由小编来跟大家介绍一下win7…

二级计算机excel以宏保存,Excel宏保存

2 个答案:答案 0 :(得分:3)像这样 -Sub SaveSheet()Dim wbkDashboard As WorkbookDim wsTarget As WorksheetSet wsTarget Thisworkbook.worksheets("Sheet1")Dim strFileName As StringstrFileName wsTarget.Range("B8").Value _& Forma…

以太网例程_开关量转以太网的应用

由于工业以太网的快速冗余自愈能力以及实时性方面问题的逐步解决,工业以太网技术正在逐步深入至工业控制网络的现场设备层应用,即直接基于工业以太网通信来控制现场设备的运行,利用开关量控制模块提供的以太网转开关量功能,计算机…

hbase+hive应用场景

一.Hive应用场景本文主要讲述使用 Hive 的实践,业务不是关键,简要介绍业务场景,本次的任务是对搜索日志数据进行统计分析。集团搜索刚上线不久,日志量并不大 。这些日志分布在 5 台前端机,按小时保存,并以小…

CPU缓存越大计算机的性能越好,CPU缓存真的越大越好?小心你的钱包

除了内存和硬盘,电脑还有一种超快速的存储设备,就是CPU缓存当你想到你电脑当中的存储设备时,你可能想到的是DDR内存、显卡上的显存、或者更有可能只是机械硬盘和SSD。但其实还有一种超快速的存储设备,对我们习以为常的、现代电脑的…

rostcm6情感分析案例分析_电商评论情感分析

并可以实现云图的可视化.7.2 R的实现这里需要安装几个必须包,因为有几个包安装比较复杂,这里给了链接http://blog.csdn.net/cl1143015 ... 82731大家可以参看这个博客安装包.安装完成后就可以开始R文本挖掘了,下面代码说明性文字比…

JavaScript之substring()方法讲解

定义和用法 substring() 方法用于提取字符串中介于两个指定下标之间的字符。 语法 stringObject.substring(start,stop) 参数描述start必需。一个非负的整数,规定要提取的子串的第一个字符在 stringObject 中的位置。stop 可选。一个非负的整数,比要提取…

jvm 参数-server_JVM选项:-client vs -server

jvm 参数-server您是否曾经在运行Java应用程序时想知道-client或-server开关是什么? 例如: javaw.exe -client com.blogspot.sdoulger.LoopTest也显示在java.exe的“帮助”中,例如,其中的选项包括: -client选择“客户…

小米3显示sim卡无服务器,小米手机无服务怎么解决

原标题:小米手机无服务怎么解决方法一:1.第一步是检查电话卡是否正确插入卡槽中。这种情况也会发生很长时间。如果未正确插入卡插槽,则将导致无法维修。2.要注意的第二件事是,如果所购买的小米手机是电信版的,那么插入…

python消息订阅_python rabbitmq消息发布订阅

发送端:import pikaimport sysconnection pika.BlockingConnection(pika.ConnectionParameters(hostlocalhost))channel connection.channel()channel.exchange_declare(exchangelogs,exchange_typefanout)message .join(sys.argv[1:]) or "info: Hello Wo…

使用before、after伪类制作三角形

使用before、after伪类实现三角形的制作&#xff0c;不需要再为三角形增加不必要的DOM元素&#xff0c;影响阅读。 <!DOCTYPE html><html><head> <style> div{ width: 100px; height: 100px; border: 1px …

EJB的超时策略:它们如何提供帮助?

EJB 3.1在其API中引入了与超时相关的注释。 AccessTimeout StatefulTimeout 让我们快速看一下它们是什么以及它们为什么重要 AccessTimeout 指定一个排队请求&#xff08;等待另一个线程完成&#xff09;超时的时间段。 当您的会话bean实例被并发请求轰炸时&#xff0c;EJ…

cad服务器手动改自动,几百块就能手动改自动? 怎样省钱换来方便

现在市场上可以手动改自动挡是真的吗?今日市场上出现的手动挡升级自动挡的技术&#xff0c;不少网友询问这个手动挡改自动挡技术&#xff0c;手动改自动挡真的吗?记者带着疑问进行各方面搜索和调查。经过调查&#xff0c;记者终于了解到市场上真的有这种技术&#xff0c;可以…

Windows Phone性能优化建议

Windows Phone性能优化建议 原文:Windows Phone性能优化建议使用background thread解码图片在Windows Phone中支持的图片格式有jpg和png&#xff0c;微软建议使用png格式的图片&#xff0c;因为png格式的图片在解码速度上要比jpg快。那么我们怎么来控制用后台线程来解码图片呢&…