1. 程式人生 > >Hibernate查詢時,資料庫返回多條紀錄,封裝後的物件卻都是一樣的問題

Hibernate查詢時,資料庫返回多條紀錄,封裝後的物件卻都是一樣的問題

1. 背景

  1. 表的設計如下
    在這裡插入圖片描述
    2.實體類部分如下:
public class WdsStRsvrREntity  {
	
	@Id
	private String stcdt;
	private Date ymdhm;
  1. 使用jpa的 findByStcdtAndYmdhmBetween(String id,Date startTime,Date endTime)的函式查詢時,會發現查出的所有資料都是一樣的。

2. 問題原因

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

3. 解決辦法

在Hibernate上給物件配置聯合主鍵來避免。方法如下:
Spring Data Jpa 複合主鍵