我正在使用JBoss7開發基於JavaEE6的Web應用程序。 在我的申請,我注入了EntityManager在我的EJB爲:JPA的EntityManager應該是RequestScoped?
class ForumServiceEJB
{
@PersistenceContext(type=EXTENDED)
private EntityManager em;
}
class TopicServiceEJB
{
@PersistenceContext(type=EXTENDED)
private EntityManager em;
}
的問題,當我更新使用ForumServiceEJB的EntityManager的一些數據則更改被製作成數據庫,但TopicServiceEJB的EntityManager的是無法看到這些變化和結果總是從緩存中獲取。
我正在使用ExtendedPerssisteenceContext作爲我的實體包含延遲加載類型的子實體集合。
如何使用/注入類型ExtendedPersistenceContext的EntityManager並在一個EJB中使不同的EntityManager仍然可以看到由其他不同的EJB EntityManagers所做的更改?
我讀EntityManagers的地方應該是RequestScoped對象。
public class MyEntityManagerProducers {
@Produces @RequestScoped
public EntityManager createDbEm() {
return Persistence.createEntityManagerFactory("forumDb").
createEntityManager();
}
public void disposeUdEm(@Disposes EntityManager em) {
em.close();
}
這是要走的路嗎?
那麼如何應對視圖中顯示子集?我還應該在EntityManager關閉之前編寫JPQL來加載惰性集合嗎? –
@ sivaprasadreddy.k:你的商業方法應該知道是否加載孩子。但這是理想的情況。很多時候,我們不能說這一點,完全取決於用戶的輸入 - 我們無法很好地預測這一點。因此,有兩種解決方案可供使用,1.創建單獨的AJAX調用來加載子項2.使用名爲open-session-in-view的過濾器。我更喜歡前者。 –
非常感謝Adeel Ansari。 –