关闭

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

840人阅读 评论(1) 收藏 举报

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运算是否相等
如果不相等,认为两个对象也不相等
如果相等,认为两个对象相等

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:7514次
    • 积分:204
    • 等级:
    • 排名:千里之外
    • 原创:11篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1条
    文章存档