假設我們有一個爲他們每個人的兩個實體依賴於彼此和DAO關於線程安全和JPA的EntityManager
Entity1 -> * Entity2
Entity2
現在,我們有兩個線程是拉從數據庫中的一些數據,線程1問Entity1Dao得到一些對象初始化了依賴字段,同時Thread2嘗試使用Entity2Dao獲得相同的Entity2對象(已經檢索到)。
Entity1Dao創建EntityManager(em1)並檢索數據,Entity2Dao將創建不同的EntityManager(em2)以從數據庫中獲取查詢對象。
問題:在em1關閉之前em2是否鎖定?如果不是,我們應該在「包含請求對象的其他entitymanager」上得到例外嗎?
感謝您的回答,您是否也可以回答這個問題。假設我有一些Object(附加)表單實體管理器,後來關閉了em,那個對象是否仍然連接? – vach
不可以。如果關閉'em',那麼'em'管理的所有對象都將不受管理。 –
我試圖爲我的應用程序實現數據訪問層,並且只有這樣,我才發現使它成爲線程安全的方法是使用entityManager每個事務,因此如您所說,從dao返回的任何對象都將變爲非託管。有沒有更好的方法來做到這一點? – vach