HIBERNA里要重写HASCODE 和EQUALS这两个方法

原创 2007年09月27日 10:49:00

equals用来按照自己的规则判断两个对象是否相等,而重写了equals后,按照java的惯例,就需要重写hashCode  

1,重点是equals,重写hashCode只是技术要求(为了提高效率)

2,为什么要重写equals呢,因为在java的集合框架中,是通过equals来判断两个对象是否相等的

3,在hibernate中,经常使用set集合来保存相关对象,而set集合是不允许重复的,但是下面的程序,你判断一下运行结果

Set user = new HashSet();
user.add(new Book("精通struts"));
user.add(new Book("精通struts"));
System.out.println(user.size());

完全取决于Book类有没有重写equals方法 ,如果没有重写,默认equals是比较地址,那么这两个book对象不一样,输出2,意味着hibernate会认为这是两个对象,再接下来的持久化过程中可能会出错 ;如果重写了equals,比如按照主键(书名)比较,那么这两个对象是一样的,输出1
equals方法虽好,但是效率相对底下;而hashCode为每一个对象生成一个散列码(通过一种神秘的算法,一般为关键属性乘以一个质数),避免了比较慢的运算,但是hashCode并不能保证能为每一个不同的对象生成唯一的散列码
所以在java的集合中,判断两个对象是否相等的规则是:
1,判断两个对象的hashCode是否相等
如果不相等,认为两个对象也不相等,完毕
如果相等,转入2
2,判断两个对象用equals运算是否相等
如果不相等,认为两个对象也不相等
如果相等,认为两个对象相等

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Hibernate中为什么要重写equals()和hashCode()这两个方法

Hibernate中为什么要重写equals()和hashCode()这两个方法

effective_java之一:覆写 equals 和 hasCode 方法

提升下自己的表达及总结能力,也许若干年后可以去做一名合格的讲师~~~ 一、覆写equals方法 为什么要覆写equals方法呢?覆写的原则是什么呢?原因以下: 有时候做到 两个实例对象在 逻辑上是否相...

联合主键实现Serializable接口,同时重写equals和hasCode方法 的原因和步骤

关于联合主键 联合主键为什么要重写equals方法和hashCode方法,是为了保证唯一性 1、在数据库保证唯一性是使用的联合主键 2、把一系列的对象放到内存的时候,为了区分同名对象,数据库是使...

java equals与hashCode 两个重要方法的重写

比较两个String 的类内容是否相同时,使用了equals方法。其实,equals方法都是来自Object类,String 类对其进行了重写以满足字符串内容的要求。Object 类中设计这个方法就是...

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字

题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n) ,空间复杂度是O(1) 。分析:这是一道很新颖的关于位运算的面试题。首先我们...
  • erazy0
  • erazy0
  • 2011-05-24 17:56
  • 1726

一个整数数组里面,除了两个数之外,其他的数字都出现了两次,写一个程序找出这两个数

一个整数数组里面,除了两个数之外,其他的数字都出现了两次,写一个程序找出这两个数,要求算法的时间复杂度为O(n). n为数组的长度。   程序代码如下: //取二进制中首个为1的位置 int...

打开ntdll.dll和kernel32.dll这两个库函数的描述文件的工具或方法

ntdll.dll和kernel32.dll文件属于Windows的系统文件,在Windows系统中扮演着重要角色。 ntdll.dll(NT Layer DLL)是Windows NT操作系统的重...

WScript.Shell对象的这两个方法Run和Exec的区别

转载自:http://blog.sina.com.cn/s/blog_4b8d35b70100twah.html Set ws = CreateObject("WScript...

小国猖狂入侵, 已经81岁的毛主席迅速写下这两个字, 军心大振!

小国猖狂入侵, 已经81岁的毛主席迅速写下这两个字, 军心大振! https://baijiahao.baidu.com/s?id=1566645234347516&wfr=spider&for...

Linux 里有/lib和/usr/lib,这两个目录下的库文件有什么区别吗?如果没区别为什么又要分开放呢

================ /lib和/usr/lib和/usr/local/lib的区别(zz) 文章分类:操作系统 简单说,/lib是内核级的,/usr/lib是系统级的,/usr/l...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)