[问题] 两次new出来的reference居然相同

楼主: NullLife (废材大叔有点累)   2014-08-07 22:37:19
事情发生在今天工作时,
我在 new 一个 jpa 的 entity 要准备写入数据库之前发生的...
因为我打算把刚 new 出来的 entity 当作map key,
来包一些东西之后,再一次做存入,
因此我 new 了两个 entity 塞到 map 之后,
居然发现我的map还是只有一个元素!!
一开始还以为是我code写错,
找了很久,最后发现问题在是entity里头覆写的 hashCode 跟 equals,
因为里头会把 seq 拿去算杂凑,
但 new 一个 entity 的时候其 seq 是null,
所以算出来的杂凑一样!
原本想说找到问题了,因为拿掉覆写的 hashCode 之后,
连续 new 两次所看到的reference就不一样了,
然后因为已经下班时间又很饿,所以我就没马上修改杂凑逻辑,就下班吃饭去了~
回家后我还是觉得很奇怪,
所以在家就简单写了class来测试,
我依然用公司那个 entity 的 hashCode 跟 equals 的逻辑来写,
这次 new 出来的又是不同的reference!
所以我一开始以为 hashCode 没写好的话会导致 new 出来的 reference 会一样,
但经过家里简单的测试之后,事实又不是这样...
所以我现在很confuse...
想请问各位前辈有人知道症结点在哪吗?
还是 jpa 对于 entity 有什么特殊的管理?
作者: cyclone350 (老子我最神)   2014-08-07 23:27:00
HashMap只是算出来的hash一样,不代表refrence一样吧?以上,猜测。
楼主: NullLife (废材大叔有点累)   2014-08-07 23:53:00
但我就是塞到map之后变一个,我才发现问题啊...所以找了很久才发现两次new的reference居然是一样的而把覆写拿掉之后,code就正常运作了
作者: cyclone350 (老子我最神)   2014-08-08 00:23:00
塞到Map变一个 != reference 一样
作者: lovdkkkk (dk)   2014-08-08 00:35:00
请实作 hashCode & equals
作者: ssccg (23)   2014-08-08 07:42:00
直接new两个出来用 == 结果是true才叫reference一样吧

Links booklink

Contact Us: admin [ a t ] ucptt.com