在我的Web應用程序中,我有一個工作正在執行大量的寫查詢。這項工作必須運行得非常快,這就是爲什麼我使用無狀態會話。SELECT查詢不使用緩存
因此,只要我必須更新或插入一個實體,我正在使用這個無狀態會話。
但是,要檢索我的作業中使用的數據,我正在使用普通會話(由Play Framework創建的會話),以便加載關係。
這通常工作正常,因爲我使用普通會話檢索作業開始處的數據,然後使用無狀態會話更新和插入更改(因此2個會話之間沒有衝突)。
但是,我現在有這個解決方案的問題。我有一個實體,我也從另一份工作中更新。在我的第一份工作中,我需要這個實體的最後更新(我需要這個實體在我的作業之間同步)。因此,當我需要它時,我使用新的SELECT檢索它,但該實體不包含上次更新!
我認爲這是因爲緩存。當使用無狀態會話在另一個作業中更新此實體時,正常會話的緩存不會更新,然後當我執行我的SELECT查詢以檢索上次更新時,我只是得到緩存中的內容(這不是最後一個更新)。
因此,要解決我的問題,我想知道是否有可能執行SELECT與Hibernate查詢,而不使用緩存。其實我想迫使休眠執行一個新的真實選擇查詢不使用緩存檢索數據庫的最後更新。
你有什麼想法嗎?
編輯
我使用JPA
謝謝你的回答。不幸的是它不適合我。使用clear()會導致我的工作崩潰,因爲我試圖更新似乎被分離的實體或其他東西。 evict()沒有效果(可能是因爲我使用的是JPA?)。但是,使用JPA我找到了一個解決方案(我會寫答案) –