我正在學習JPA並有一個問題:當我們需要多個EntityManager?
在哪些情況下我們需要在我們的應用程序中使用多個EntityManager
?是
我所知道的兩種情況如下:
當我們的應用程序是一個多線程應用程序和超過一個線程需要JPA事務,因爲
EntityManager
不是線程安全的,我們需要每個線程一個EntityManager
。當任何線程需要多個併發事務,我們需要一個以上的
EntityManager
在該線程因爲EntityManager
和EntityTransaction
之間一比一的關係。
Q1。當我們需要多個EntityManager
時是否還有其他情況?
Q2。根據我的理解,每個Persitence Unit應該只有一個EntityManagerFactory
。我對麼?如果不是,那麼當每個持久單元需要多個EntityManagerFactory
時,那些情況是什麼?
對於Q1:我估計一個_Entity Manager_對象應該具有最小的開銷,但我仍然渴望詢問有多少開銷:) 哇,互相依賴的diff線程更加複雜。那麼可以肯定地說,你應該每個線程有1個EM?然後你確保你捕獲任何異常,因爲你有多個線程使用同一個表,對吧? – thirdy 2011-12-28 04:34:15
是的,因爲EM不是線程安全的,如果我爲它創建一個包裝並在內部調用EM的保存/更新的包裝器中包含'synchronized'保存/更新方法,它是否可以用於多個線程。我也永遠不清除/關閉EM?我認爲仍然存在同時讀寫的問題。您能否讓我知道您對此的評論? – bluelurker 2016-05-06 17:56:50