簡體   English   中英

休眠+春季+會話+緩存

[英]Hibernate + Spring + session + cache

我們在Java應用程序中使用Spring的Hibernate。 我們發現,當一個會話更新數據庫中的某些內容時,其他會話看不到更新。 例如,user1從數據庫獲取帳戶余額,然后user2增加余額,如果user1再次獲得對象,則他在更新之前再次看到帳戶余額(似乎會話使用其緩存中的值),但是我們希望使用new獲取更新的對象賬戶余額。 在與user2會話不同的所有活動期間,User1使用一個會話。 是否有任何配置可以強制從數據庫中獲取更新的對象? 或任何其他幫助?

這是設計使然(將Session視為“工作單元”); 會話應在事務上隔離。 這是會議應該短暫存在的眾多原因之一。 在我看來,您可能正在使用壽命長的會話。

但無論如何,您可以使用session.refresh( theAccount );強制“其他會話”(在您的情況下為user1) 刷新其帳戶狀態session.refresh( theAccount ); 如果您在刷新帳戶時也需要刷新依賴狀態,則刷新也是一個可級聯的操作。

如果您對所有活動都使用單個會話,那么您將看到預期的結果。

會話1將加載由會話2更改的對象。但是,會話1仍處於打開狀態,該對象位於會話(第一級)緩存中。 您可以使用session.clear()刷新Session1,然后如果重新加載該對象,則將獲得更新的版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM