我見過一個情景:一個由Hibernate數據庫觸發器和Hibernate
save
或update
一些數據在目標表- 有這將
insert
或update
之前執行對目標表的觸發器由Hibernate目標表 select
的操作了這個紀錄
但是我發現那些被觸發器修改過的字段並沒有被真正取出。 這是與Hibernate的事務提交(flush()已被調用)還是Hibernate緩存相關?謝謝。
我見過一個情景:一個由Hibernate數據庫觸發器和Hibernate
save
或update
一些數據在目標表insert
或update
之前執行對目標表的觸發器由Hibernate目標表select
的操作了這個紀錄但是我發現那些被觸發器修改過的字段並沒有被真正取出。 這是與Hibernate的事務提交(flush()已被調用)還是Hibernate緩存相關?謝謝。
這可能是由第一個(會話)或第二個(例如ehcache)緩存引起的。要重新讀取實體,您需要調用session.refresh()。
hibernate docs從(在部分底部)
是可能的重新加載的對象和在任何時間 其所有集合,使用所述刷新()方法。當使用數據庫 觸發器初始化對象的某些屬性時,這很有用。
sess.save(cat);
sess.flush(); //force the SQL INSERT
sess.refresh(cat); //re-read the state (after the trigger executes)
可以爲generated values屬性映射。這些值始終來自數據庫,無法存儲。 Hibernate會在插入或更新數據庫後自動在後續查詢中加載這些值。