休眠中的一級緩存在會話對象上維持並且在同一個JVM的邊界內。這是hibernate使用的強制性緩存。我擔心如何在集羣環境中管理它。多個節點將擁有自己的第一級緩存(等於會話數)。在單個JVM中,一個實體可以是不同會話的一部分,但是事務管理器,樂觀鎖定處理情況....但是,我們如何在集羣環境中管理它?集羣環境中的休眠一級緩存
1)實體可以在兩個不同節點的一級緩存導致陳舊的數據問題,數據丟失問題。
2)如果我們使用樂觀鎖定....將很難恢復事務,並且還會影響其他節點上的其他有用事務。
3)我們不能對每一筆交易採取悲觀的鎖定。它會殺死休眠緩存的有用性。
4)隔離級別的設置也不起作用,因爲事務管理是由hibernate應用程序本身完成的,並且事務管理的邊界是一個JVM。
可能是你沒有得到錯誤,但如果節點不同,它不是一個無錯誤的安排。事務管理由hibernate應用程序本身完成。它不使用數據庫事務管理(除非悲觀鎖定)。隔離級別的邊界是單個JVM。 – user3082820
我不同意。在休眠之下,你真正擁有的是數據庫事務,並且這兩個應用程序實例都攻擊同一個數據庫。如果app [node1]打開事務並刷新(不提交),app [node2]將讀取未被取消的數據,除非使用READ_COMMITED隔離級別。 – codependent
Hibernate不使用DB鎖進行事務管理。檢查hibernate事務API。很少數據庫不支持所有類型的隔離級別。如果在Hibernate中設置READ_COMMITED隔離級別,那麼它不是數據庫的隔離級別。 Hibernate通過悲觀鎖定來獲取數據庫隔離。 – user3082820