[問題] 兩次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