hibernate里的session一级缓存,当一个用户通过get()load()等方法从数据库拿到某条数据,数据被缓存,此时第二个用户修改该条数据,数据库该数据被修改,此时第一个用户再get()该数据,从缓存中拿到数据,拿到的并不是实时的数据而是缓存的数据。这样想对不对?应该怎么解决?
学习是最好的投资!
是這樣的,所以一般session很短小,因為session關閉重開所有cache就都沒了
在session內可以用evict()或clear()刷新快取
Session介面中定義了一個refresh()方法,呼叫該方法,在呼叫get()或load()方法之前,呼叫該方法可以拿到最新的資料;
怎麼拿到最新的數據樓上都已經說了。我的建議是首先session對應一個資料庫事務,事務的執行時間應該盡可能的短。第二,對於在session期間資料在其它地方發生改變,官方的解決方法應該是用鎖機制,對於可容忍一定的事務失敗回滾的情況可使用樂觀鎖,否則可考慮悲觀鎖,由樓主在實際應用中自己權衡使用哪一種方式。
是這樣的,所以一般session很短小,因為session關閉重開所有cache就都沒了
在session內可以用evict()或clear()刷新快取
Session介面中定義了一個refresh()方法,呼叫該方法,在呼叫get()或load()方法之前,呼叫該方法可以拿到最新的資料;
怎麼拿到最新的數據樓上都已經說了。我的建議是首先session對應一個資料庫事務,事務的執行時間應該盡可能的短。第二,對於在session期間資料在其它地方發生改變,官方的解決方法應該是用鎖機制,對於可容忍一定的事務失敗回滾的情況可使用樂觀鎖,否則可考慮悲觀鎖,由樓主在實際應用中自己權衡使用哪一種方式。