2011-06-30 16 views
4

Spring 3.0でJPAとHibernateを使用しています。JPA&Spring- Springから共有EntityManagerを取得する方法は?

私はLocalEntityManagerFactoryBeanJpaTransactionManagerを定義しました。 すべてのDaosは@PersistenceContextで埋め込まれたEntityManager(私は同じものだと思います)がありますが、私は同じEntityManagerを使用したいと思っています。それを達成する方法は?

私はちょうどEntityManagerFactory豆を解決しcreateEntityManagerを呼び出すと、このEntityManagerがどのダオの使用とは別であり、(DAOを介して私は(見つけたとき)と、オブジェクト、私はそれを手動EntityManagerを取得し使用して永続化することができない - エンティティが取り外されます)。

答えて

4

一方的な方法がありますが、本当に必要なことは確かなはずです。ほとんどの場合、エンティティマネージャを挿入できます。キーとして工場を使用して、ThreadLocalJpaTransactionManager春の店舗でエンティティマネージャを開始し、各トランザクションのために - 要するに

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

は、ここでは他の選択肢が存在しない場合はそれを行う方法です。

+0

Clojureコードで注釈を使用したいので、私はそれが必要です(注釈はありません。私はClojureアプリケーションの中で春のコンテキストをホストしています)。私は、しかし、プロキシを非表示にすることはできませんEntityManagerFactoryオブジェクトを隠す - と私はgetResourceでそれを使用することができません。私はアドバイスとgetTargetSource()へのプロキシをキャストしようとしましたが、運がありません。 –

+0

私はクロージャを助けることはできません。私は、同様の質問をしている他の人のために答えを保持します。 – Bozho

関連する問題