2011-06-30 41 views
4

我在Spring 3.0上使用JPA和Hibernate。JPA&Spring-如何從spring獲取共享EntityManager?

我已經定義了LocalEntityManagerFactoryBeanJpaTransactionManager。 所有的道士有EntityManager(我想是共享的)注入@PersistenceContext,但我有一些代碼,我想使用相同的EntityManager,但手動獲取它。如何做到這一點?

當我剛剛解決EntityManagerFactory豆和呼叫createEntityManager,這EntityManager是從一個單獨的這道的使用(通過DAO所以當我發現()和對象,我不能堅持它使用手動獲得EntityManager - 實體分離)。

回答

4

有一種方法,但你應該確定你確實需要這樣做。在幾乎所有情況下,您都可以注入實體經理。

這裏是如何,如果沒有其他的選項存在這樣做:

EntityManagerFactory emf = obtainEntityManagerFactory(); // you mentioned you have it 
EntityManagerHolder holder = TransactionSynchronizationManager.getResource(emf); 
EntityManager em = holder.getEntityManager(); 

總之 - 由JpaTransactionManager春天店在ThreadLocal開始實體管理每一筆交易,使用工廠的一個關鍵。

+0

我需要它,因爲我想在Clojure代碼中使用它(沒有註釋,我在Clojure應用程序內託管了spring context)。然而,我無法解開代理隱藏的EntityManagerFactory對象 - 所以我無法在getResource中使用它。我試圖將代理轉換爲建議,並getTargetSource(),但沒有運氣。 –

+0

我無法忍受clojure。爲了其他人也有類似的問題,我會保留答案。 – Bozho

相關問題