2014-06-19 53 views
0

我有一個數據庫觸發器,在插入數據時執行。從應用程序結束,我使用hibernate更新由數據庫TRIGGER更新的同一個表。當我更新應用程序端的數據時,由Trigger更新的數據被舊數據覆蓋。我發現hibernate中的緩存值與數據庫中的值不一致。有沒有適當的方法來解決這個問題?我正在談論的緩存是一級緩存。休眠應該只更新數據庫中的某些字段

編輯 - 休眠應更新數據庫中的某些字段,數據庫中的其他字段應由TRIGGER更新。這可能嗎?

回答

1

您可以使用刷新:

session.merge(entity); 
session.flush(); 
//the trigger has been called 
session.refresh(entity); 
//the entity will reflect the trigger changes 
+0

在我的情況下,對「刷新」的調用也會清理我的新數據。假設我想只更新數據庫中的特定字段。這些是唯一由TRIGGER更改的字段。表中的其他字段將從應用程序中修改。假設數據庫NAME和DOB中有兩個colmuns。假設DOB由TRIGGER更新,NAME由應用程序更新。所以當我從數據庫中檢索對象時,我想從數據庫中保存新的NAME和最新的DOB(而不是緩存的)。 –

+1

然後DOB proeprty應該標記爲:@Column(name =「dob」,insertable = false,updatable = false) –

0

我的問題是真的是在問題的編輯被提及。 Vlad在評論中提到了這個問題的簡單解決方案。將列標記爲@Column(name =「dob」,insertable = false,updatable = false)。這有助於避免任何重大的意外,如果休眠更新表。