Hibernate的持久化类中什么时候需要重写hashcode()和equals()方法
来源:互联网 发布:星图软件中文版下载 编辑:程序博客网 时间:2024/05/29 13:31
源文地址:http://hi.baidu.com/xforluxx/blog/item/1412910940e26b80d1581bee.html
equals用来按照自己的规则判断两个对象是否相等,而重写了equals后,按照java的惯例,就需要重写hashCode 。重点是equals,重写hashCode只是技术要求(为了提高效率) 。
为什么要重写equals呢?
因为在java的集合框架中,是通过equals来判断两个对象是否相等的 。如果没有重写,默认equals是比较地址。
而hashCode为每一个对象生成一个散列码(通过一种神秘的算法,一般为关键属性乘以一个质数),避免了比较慢的运算。但是hashCode并不能保证能为每一个不同的对象生成唯一的散列码。需要再加上equals方法去判断。
所以在java的集合中,判断两个对象是否相等的规则是:
1,判断两个对象的hashCode是否相等
如果不相等,认为两个对象也不相等,完毕
如果相等,转入2
2,判断两个对象用equals运算是否相等
如果不相等,认为两个对象也不相等
如果相等,认为两个对象相等
示例:
Set user = new HashSet();
user.add(new Book("精通struts"));
user.add(new Book("精通struts"));
System.out.println(user.size());
如果没有重写,那么这两个book对象不一样,输出2,
意味着hibernate会认为这是两个对象,再接下来的持久化过程中可能会出错
如果重写了equals,比如按照主键(书名)比较,那么这两个对象是一样的,输出1。
- Hibernate的持久化类中什么时候需要重写hashcode()和equals()方法
- HashMap什么时候重写hashcode和equals方法,为什么需要重写
- 【Java基础之重写equals、hashCode和compareTo方法】什么时候需要重写重写equals方法?为什么重写equals方法,一定要重写HashCode方法?
- HashSet (需要重写hashCode和equals方法)
- 什么时候需要重写equals方法?为什么重写equals方法,一定要重写HashCode方法?
- ID的生成策略(hibernate的id生成策略,主键类为什么需要实现序列化接口,同时还要重写hashCode()和equals()方法)
- ID的生成策略(hibernate的id生成策略,主键类为什么需要实现序列化接口,同时还要重写hashCode()和equals()方法)
- 什么时候需要重写equals方法
- 重写equals方法一般需要重写hashCode方法的原因
- 重写equals方法和hashcode(集合需要重写)
- hibernate之什么时候必须实现equals()和hashCode()方法?
- 重写hashCode()和equals()方法的必要
- equals 和 hashCode 的重写方法
- equals和hashCode的重写方法
- 为什么equals()方法和hashCode()方法需要同时重写?
- 为什么要重写hashcode()方法以及如何重写hashcode和equals方法
- 整理 Object 类(为什么重写 equals 和 hashCode 方法)
- 重写hashCode和equals方法
- 测试结果OK、POK、NG、NT的意义
- MSSQL与C#中的数据类型对应表
- ios文件读写
- 关于Asp.Net Mvc3.0 使用KindEditor4.0 上传图片与文件
- CheckBoxList全选单选切换
- Hibernate的持久化类中什么时候需要重写hashcode()和equals()方法
- HttpHander与httpModel配置与应用
- 在PlayBook NDK中创建自己的Cocos2dx项目
- C/C++数组名与指针区别深入探索
- android常用代码
- 用Vim调用MSDN查询
- sql中时间日期操作(时间日期函数,时间日期格式,时间日期转换参数,时间日期比较,时间日期计算)
- db2 范围分区表常用命令
- spring 集成flex(2)