14

JPAを使用するプロジェクトでは、よく使用します

@Inject EntityManager em;

そのようなオブジェクトを取得するために。Web の多くのコード スニペットでは、代わりに次のコードが使用されていることがわかりました。

@PersistenceContext EntityManager em;

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

私のコードは JBoss EAP 6.1 と Hibernate で実行されます。

4

3 に答える 3

8

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

@InjectCDI アノテーションです。これは非常に汎用的で、さまざまなオブジェクトを注入するために使用できます。

于 2014-02-01T15:24:01.503 に答える
7

@PersistenceContextは非常に具体的な注釈であり、「このフィールドに永続コンテキストを挿入する」と言っています。管理されたコンテキストの外では使用できません。

一方、@Injectは非常に汎用的です。「このフィールドに注入する必要があります」と書かれています。必ずしも永続化コンテキスト用ではありませんが、注入されたものとして定義したいものはすべてです。

この記事(これは、あなたが求めていることとまったく同じではありません) が、あなたにとってより多くの光を当てるかもしれません。

@Inject のソースに直接行きたい場合は、ここで仕様を読むことができます

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

于 2013-05-16T22:14:18.263 に答える