2011-06-20 27 views
4

我正在使用JPA 1的資源本地實體管理器。什麼是創建EntityManager的最佳做法是創建實體管理器的最佳做法

  1. 創建辦的工作密切EntityManager的每次(EntityManager的不重的重量,但還是無聊)

  2. 爲每個線程創建的EntityManager並將其儲存爲ThreadLocal變量並使用它( - 我應該在哪裏關閉的EntityManager b-任何會話entitystored作用域的bean將是一個分離的實體,因爲在其persistense方面的EntityManager哪個實體關閉或現在屬於另一個線程。)

  3. 商店的EntityManager我N A會話bean和會話過程中使用相同的EntityManager(每個人的會議unawere)

+0

是否有任何特殊的原因,你不在JPA 2? –

+0

@Matt:你爲什麼刪除你的答案?它在JPA1中也是有效的。 – BalusC

+0

@BususC不確定是否屬於這種情況,沒有時間去核實。 –

回答

3

我爲每個請求創建EntityManagers並關閉他們在ServletRequestListener

+0

+1這也可以在一個過濾器中完成。 –

5

你應該使用@PersistenceContext註解注入EntityManager。不要擔心它的來源—這是依賴注入工作。

+0

我使用jsf1.2,tomcat 6和jpa 1我想我沒有這樣的選項。我必須移動項目ejb3,但現在這不是一個選項 – ayengin

+0

註釋是在JPA 1中引入的,因爲BalusC評論(關於該問題)。它與JSF無關。您只需將其作爲字段添加到EJB中即可。 –

+0

如果我不在乎會看到org.hibernate.PersistentObjectException:分離的實體傳遞給堅持:) – ayengin

相關問題