2016-05-28 4 views
3

@PersistenceUnitはEntityManagerFactoryを注入するためのものですが、@PersistenceContextはコンテナ管理のアプリケーションにEntityManagerを注入するためのものだと常に考えてきました。@PersitenceContextまたは@PersitenceUnitを使用してEntityManagerFactoryを注入しますか?

JavadocはのEntityManagerFactoryおよびそれに関連する永続ユニットへの依存性を表す(http://docs.oracle.com/javaee/7/api/javax/persistence/PersistenceUnit.html

PersistenceUnitについて

言います。

とのPersistenceContext用(http://docs.oracle.com/javaee/7/api/javax/persistence/PersistenceContext.html

コンテナ管理のEntityManagerとその関連する永続コンテキストの依存性を表します。

次の例では、アプリケーションを使用するアプリケーションでトランザクションを管理する方法を示し、この

のような例が含まれているこれまでのところは良いが、その後、私はJPAのチュートリアルを読んでいた(https://docs.oracle.com/cd/E19798-01/821-1841/bnbqy/index.htmlを参照してください) -managedエンティティマネージャ:

@PersistenceContext 
EntityManagerFactory emf; 
EntityManager em; 
@Resource 
UserTransaction utx; 
... 
em = emf.createEntityManager(); 
try { 
    utx.begin(); 
    em.persist(SomeEntity); 
    em.merge(AnotherEntity); 
    em.remove(ThirdEntity); 
    utx.commit(); 
} catch (Exception e) { 
    utx.rollback(); 
} 

我々はマネージコードをアプリケーションの話をしている場合はそうのPersistenceContextものEntityManagerFactoryを参照することができますか?

免責事項 - 私はいつも@PersistenceUnitがのためにあった@PersistenceContextは、コンテナ管理のアプリケーションにEntityManagerを注入するためだったと思っているPersistenceUnit vs PersistenceContext

+0

まだ答えはありますか? –

答えて

2

- 私は推測この質問から回答に関連していませんEntityManagerFactoryをインジェクトします。

これは本当です。

JPAチュートリアルの例は、間違った間違いです。以前は同じセクションに「アプリケーション管理エンティティマネージャは、」それはEntityManagerインスタンスを取得するには

を書かれて、あなたは最初javax.persistence.PersistenceUnit注釈によって、アプリケーションコンポーネントにそれを注入することによりてEntityManagerFactoryインスタンスを取得する必要があります:

@PersistenceUnit EntityManagerFactory emf;

続いてEntityManagerFactoryインスタンスからEntityManagerを得る:

のEntityManager EM = emf.createEntityManager()。

+0

EntityManagerではなく、EntityManagerFactoryになります! – Leo

関連する問題