1. 程式人生 > >hibernate 查詢資料全是第一條

hibernate 查詢資料全是第一條

今天做一個查詢,查詢的sql 放在資料裡執行,是四條不一樣的資料,可是用hibernate 一查卻全是一樣的.

 

list中的四個物件,都是一樣的.

這是什麼原因呢?
其實很簡單,因為hibernate配置檔案上,我這個實體的主鍵是ID欄位,而我的檢視,ID並不能作為唯一標識,所以,當hibernate查資料庫的第一條紀錄的時候,就生成了一個
Os4VDemandCert物件,放在持久物件池裡,
當再去查第二條紀錄的時候,hibernate發現第二條紀錄的ID和持久池裡那第一條紀錄的ID是一樣的,所以就不重複生成新的物件了,直接拿持久池裡原有的那個物件放到list中去,第三條紀錄也一樣.
這樣,就導致list中的3個物件都是一樣的結果.
這個跟Override了物件的hashCode和equals方法沒有關係.

要解決上面的問題.可以用JDBC,或者在Hibernate上給物件配置聯合主鍵來避免..
在以後準備寫一個VO來對映資料庫中的檢視的時候,先注意下一檢視是不是有唯一欄位,如果有,就拿能唯一標識一條紀錄的那個欄位來作為主鍵,或許用聯合主鍵.

 

後面我直接在表裡加了一個主鍵就解決了