`
chenggg
  • 浏览: 5912 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

何时需要overload掉equels()和hashcode();

阅读更多
no eq/hC at all       eq/hC with the id property        eq/hC with  buisness key
use in a composite-id  No              Yes           Yes
multiple new instances in set     Yes     No      Yes
equal to same object from other session  No  Yes  Yes
collections intact after saving  Yes  No  Yes

首先解释一下,no eq/hc at all指的是不是全部需要后面的两种情况。
第一种情况:如果在我们的pojo当中涉及到有联合主键的操作时,那么不但需要id,还要业务键作为equels的判断值。
第二种情况:如果在我们的系统中涉及到。在一个新的set中,添加多个新的对象,然后save的时候。如:
HashSet someSet = new HashSet();
someSet.add(new PersistentClass());
someSet.add(new PersistentClass());
assert(someSet.size() == 2);
当hibernate。save的时候,第一个会持久化到数据库,此时第一个已经是一个po了,他和第二个不是同一个对象,因为此时第二个还是一个vo对象。这种情况是采用主键的方式,是可以插入到数据库当中,但是通常情况之下,我们是不允许具有相同名字的人存到数据库中。这样又如何处理呢?就是为了避免业务键上具有相同的值,该如何处理呢?就是,让业务主键参与。主键可以不参与equeas。
第三种情况:当我们的系统涉及到一个相同的一个纪录,会在不同的session中操作的时候。如:
PersistentClass p1 = sessionOne.load(PersistentClass.class, new Integer(1));
PersistentClass p2 = sessionTwo.load(PersistentClass.class, new Integer(1));
assert(p1.equals(p2));
那末不但要让主键参与,还要让业务键参与equals。
第四种情况:当我们的系统中涉及到,不使用set集合持久化数据的时候。如:
HashSet set = new HashSet();
User u = new User();
set.add(u);
session.save(u);
assert(set.contains(u));
就可以只让业务键参与equeals。
分享到:
评论

相关推荐

    Java面试宝典Beta6.0.pdf

    本节课主要讲解Java基础知识,包括跨平台性、逻辑运算符、构造器、break、continue、return语句、equals和hashCode方法、String类继承、值传递和引用传递等内容。 1. 跨平台性 Java语言编写的程序,一次编译后,...

    java项目开发总结.docx

    * Iterator、equals、hashCode、Comparable 和 Comparator 等集合操作 五、Java 标准库 * String 和 StringBuffer 类 * java.util.Date 和 SimpleDateFormat 类 * Regex 正则表达式和 Pattern 类 六、反射机制 *...

    Java程序员必备面试1000题精选

    对于自定义类,如果重写了equals,通常也需要重写hashCode,以保持一致性原则:如果两个对象相等,那么它们的哈希码也应该相等。 9. **异常分类**: Java中的异常分为检查型异常(Exception类的子类,如...

    职来职往Java万字入门面试题

    以下是一些常见的Java面试知识点,涉及JDK、JRE、JVM的区别,以及hashCode()和equals()的关系,String、StringBuffer、StringBuilder的区别,泛型中extends和super的含义,==和equals方法的区别,重载与重写的概念,...

    涵盖了90%以上的面试题

    5. **equals 和 hashCode**:当自定义类作为 HashMap 的 key 时,必须重写 equals 和 hashCode 方法以确保正确的哈希映射和等价比较。不重写可能会导致预期之外的行为。 6. **volatile**: volatile 关键字确保变量...

    面试指南java

    - Equals()和HashCode()的作用:理解equals方法和hashCode方法在Java中的重要性,以及它们如何影响对象比较和集合操作。 - Sleep()和Wait()的区别:清楚这两个方法在多线程环境下的使用及其背后的原理。 - IO与NIO的...

    Java项目经验.docx

    迭代器(Iterator)用于遍历集合,而equals和hashCode方法用于对象比较,Comparable和Comparator接口则用于自定义排序规则。 反射机制允许程序在运行时动态地获取类的信息并调用其方法。Class类、Method类、Field类是...

    JAVAEE精选面试题.docx

    如果两个对象`equals()`相等,它们的`hashCode()`必须相同,以确保正确地存储和查找。但是`hashCode()`相等的两个对象不一定`equals()`相等。 以上知识点涵盖了Java基础以及JavaEE面试中常见的问题,包括数据类型的...

    安卓java读取网页源码-questions:自问自答

    equals 和 hashCode 有什么区别 说说你对 final 修饰符的理解 说说你对泛型的理解 泛型中 extends 和 super 的区别 描述下 Java 中的异常处理机制 什么是 HashMap,描述下其实现原理 HashMap、Hashtable 和 HashSet ...

    Java面试宝典Beta5.0.pdf

    7. equals和hashCode方法:在Java中,两个对象equals方法返回true,意味着它们是等价的,但是这两个对象的hashCode方法返回值可以不同。散列码用于确定对象在散列表中的索引位置,建议覆盖equals方法时也覆盖...

    Java基础知识面试题(2024最新版).docx

    13. **equals和hashCode**:equals方法用于比较对象内容是否相等,而hashCode方法返回对象的哈希码,两个相等的对象必须具有相同的哈希码。 14. **IO流**:Java的IO流分为字节流和字符流,BIO、NIO、AIO分别代表...

    Java 22道基础面试题.docx

    当重写 `equals()` 方法来比较对象是否相等时,通常也需要重写 `hashCode()` 方法。根据Java集合框架的规定,如果两个对象相等(`equals()` 返回 true),它们的 `hashCode()` 必须相同。 8. **类的初始化顺序**:...

    java程序员面试宝典

    这是因为equals方法和hashCode方法是两个独立的方法,equals方法用于比较两个对象的值是否相等,而hashCode方法用于生成对象的哈希码。 5. 不可以继承String类,因为String类是final类,不能被继承。 6. 当一个...

    2_Offer--面试小抄第二版 亮白 By 库森.pdf

    21. 重载(Overload)和重写(Override)的区别是什么? 重载是同一个方法名不同的参数列表,重写是子类对父类方法的重写。 22. 重载的方法能否根据返回值类型进行区分? 重载的方法不能根据返回值类型进行区分。 ...

    Java面试问答题.pdf

    20. Java中的hashcode和equals方法:在Java集合框架中,正确实现equals和hashCode方法对于集合操作非常重要。 以上知识点涉及Java编程语言的基础知识,包括语法、数据结构、面向对象原则、异常处理、集合框架、输入...

    Java面试宝典_2018---1

    对象的equals()和hashCode()方法通常一起讨论,因为它们在判断对象是否相等时起到关键作用。两个对象值相同意味着equals()返回true,但这并不意味着它们的hashCode()必须相同。hashCode()主要用于哈希表,如HashMap...

    2017版本meitu包括j2ee安卓算法数据结构和操作系统内容

    当两个对象相等(`equals`方法返回`true`)时,它们的`hashCode`值也应该是相等的。但反过来不成立,即不同的对象可能具有相同的`hashCode`值。`hashCode`在散列表中用于提高查找效率。 #### 6. `String`、`...

    java面试题.pdf

    2. equals() 和 hashCode() 之间的关系:equals() 方法用来比较两个对象是否相等,hashCode() 方法用来生成对象的哈希码,两个对象的哈希码相同不一定相等。 3. final 关键字的作用:final 关键字用于修饰变量、方法...

    Java面试指南.pdf

    - equals()和hashCode()的作用:equals()方法用于判断两个对象是否相等,hashCode()方法用于获取对象的哈希码,通常在使用哈希表时一同使用。 4. Java对象的创建和序列化 - Java创建对象的方式:可以通过new...

Global site tag (gtag.js) - Google Analytics