根據Hibernate中的Read LockMode文檔這是一個共享鎖。此鎖定模式中的對象是從當前事務的數據庫中讀取的,而不是從緩存中取出。在Hibernate中對Read和None LockMode進行說明?
SessionFactory sessions = new Configuration().configure().buildSessionFactory();
Session session = sessions.openSession();
Transaction tx = null;
tx = session.beginTransaction();
Person p1 = (Person)session. get(Person.class,1);//line 1
p1 = (Person)session. get(Person.class,1);//line 2
session. lock(p1, LockMode.READ);//line 3
p1 = (Person)session. get(Person.class,1);//line4
p1 = (Person)session. get(Person.class,1);//line 5
現在,作爲每共享鎖定義保持共享鎖,以防止併發訪問由寫入與上面的代碼段,我提出的螺紋在第4行至保持(所以它已獲得在讀出鎖模式在這個時間點)。現在我試圖從另一個線程更新id爲1的人,它成功了。不知道爲什麼,因爲按照定義持股鎖來防止併發訪問由作家
爲已讀鎖定模式說,在這種鎖模式對象是從數據庫當前事務讀取,而不是被拉緩存。 Bt在我的代碼片段在第4行和第5行,它沒有從數據庫中獲得id爲1的行,它僅從會話獲得。爲什麼?
最後一個問題沒有鎖定模式。根據文檔不需要鎖。如果使用這種鎖定模式請求對象,如果需要從數據庫中實際讀取狀態,而不是從緩存中取出,則會獲得READ鎖定。如前所述,沒有獲得鎖,那麼爲什麼開發人員會獲得此鎖,因爲這將是默認設置。 對不對?
你可以在後臺發佈** SQL查詢**嗎? – ManuPK