2011-01-18 11 views
2

@PersistenceContext(または@PersistenceUnit)を使用して、jsf管理対象Beanにエンティティ・マネージャ(またはそのファクトリ)を注入できますか?管理対象Beanへのエンティティ・マネージャの挿入

私はそれを試しましたが、何もしなかった、私はNullPointerExceptionを取得します。

答えて

7

はい、可能です。これが構文です。

@PersistenceContext 
EntityManager em; 

プロジェクトにはpersistence.xmlが必要です。 Btw:Glassfish 3を実行しています。

この後、em.createNamedQueryのようなメソッドを使用できます。

また、注入はコンストラクタの後に行われるので、コンストラクタでデータベース関数を実行しようとすると機能しません。 @PostConstructアノテーションをメソッドに追加する必要があります。これはおそらくあなたの持つ問題です。

+0

よろしくお願いいたします。私はコンストラクタでemを使用しました – Alf

+2

JSFマネージドBeanにEntityManagerを挿入すると、EntityManagerはコンテナ管理のトランザクション(CMT)を使用しません。 Java EE 7までは、コンテナ管理のトランザクションを使用するEJBのみが使用され、Java EE 7では、非推奨のJSFマネージドBeanではなくCDI Beanに対してのみCMTが拡張されました。つまり、エラーが発生した場合、トランザクションはコンテナによってロールバックされません。管理する必要があります。 [リファレンス](http://stackoverflow.com/a/17842796/201891)および[リファレンス](https://stackoverflow.com/questions/8772175/how-to-implement-container-managed-transaction-cmt) – DavidS

+1

5か月後、前回のコメントが真実であるかどうかはわかりません。私は決してそれをテストしなかった:私はちょうど私が読んだものから推測した。 : - \ – DavidS

関連する問題