何时需要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。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值