2013-05-16 15 views
11

は、私は一般的にそのようなオブジェクトを得るために@Injectと@PersistenceContextの違いは何ですか? JPAを使用してプロジェクトに

@Inject EntityManager em; 

を使用します。ウェブで多くのコードスニペットが使用されていることがわかりました。

@PersistenceContext EntityManager em; 

これらのオプションの違いは何ですか?

私のコードは、JBoss EAP 6.1および休止状態で実行されます。

答えて

6

@PersistenceContextは、コンテナ管理エンティティマネージャに依存することを宣言する特定の注釈です。永続性タイプのような多くのパラメータを指定できます。永続性タイプをEXTENDEDに設定することは、ステートフルセッションBeanのライフサイクル全体の永続性コンテキストを維持する場合に重要です。 @PersistenceContextはJPAアノテーションです。

@InjectはCDI注釈です。これは非常に汎用的で、さまざまなオブジェクトを注入するために使用できます。

5

@PersistenceContextは非常に特定のアノテーションであり、「永続コンテキストでは、このフィールドを注入」と言っています。管理されたコンテキスト外では使用できません。一方、

@Inject、非常に一般的です。それは、 "あなたはこのフィールドを注入すべきです"と言います。必ずしも永続コンテキストのためではありませんが、注入するものとして定義したいものはありません。

This articleあなたのためにそれでより多くの光を当てること(正確にあなたが求めているもののりんごにりんごではありません)。

あなたは@Injectが何であるかのソースに直行したい場合は、you can read the spec here

@Injectは、Javaクラスやインターフェイスへの依存を注入することができる点を識別します。その後、コンテナは必要なリソースを提供します。この例では、Login Beanは2つの注入ポイントを指定します。

+0

私はあなたの答えは、これまでのように、しかし、代わりに他のいずれかのオプションを選択の結果は何ですか? –

+0

私は知らない:(これは私が問題で見つけることができるすべてです。 –

0

@Injectは、コンテナがEntityManagerと思われるものを提供します。

しかし、複数の修飾子注釈を使用して、それを生成するものがある場合や、unitName属性を@PersistenceContext注釈に渡す必要がある場合は、複数の場合があります。

関連する問題