2011-06-20 12 views
4

JPA 1でリソースローカルエンティティマネージャを使用しています。何entitymanagerを作成するベストプラクティス

  1. がない仕事近くのEntityManager毎回。(EntityManagerのない重いが、それでも退屈)

  2. を作成しているEntityManagerを作成するためのベストプラクティスは、すべてのスレッドのためにEntityManagerを作成し、ThreadLocalの変数として記憶されますそして、( - どこで B-任意のセッションでentitystoredは、BeanがそのpersistenseコンテキストでEntityManagerをどのエンティティが閉じているため外れエンティティであるか、今、別のスレッドに属しますスコープのEntityManager閉じる必要があります。)

  3. ストアのEntityManager私をそれを使用しますnはセッションBeanとは、(お互いのセッションunawere)

+0

JPA 2を使用していない特別な理由はありますか? –

+0

@Matt:あなたはなぜあなたの答えを削除しましたか? JPA1でも有効です。 – BalusC

+0

@BalusCはそうであるかどうか確信が持てませんでした。確認する時間がありませんでした。 –

答えて

3

リクエストごとにEntityManagersを作成し、ServletRequestListenerで閉じます。

+0

+1これはフィルタでも行うことができます。 –

5

あなたは@PersistenceContextアノテーションを使用してEntityManagerを注入しなければならないセッション中に同じEntityManagerを使用します。職場での依存性の注入である—がどこから来るのか心配しないでください。

+0

私はjsf1.2、tomcat 6、jpa 1を使用しています。私はこのようなオプションを持っていないと思います。プロジェクトejb3を移動する必要がありますが、今のところこれはオプションではありません – ayengin

+0

注釈は、BalusCがコメントしたように、JPA 1に導入されました。 JSFとは何の関係もありません。それをフィールドとしてEJBに追加するだけです。 –

+0

もし私が気にしなければ、org.hibernate.PersistentObjectExceptionが表示されます:デタッチされたエンティティがpersistに渡されました:) – ayengin

関連する問題