2012-05-25 86 views
0

我目前有我PersistenceContext刷新數據的問題。 我有一個調用BMT EJB3 bean的CMT EJB3 bean。在BMT bean中,我在一個對象上做了一些處理邏輯。我提交了更改,我可以看到數據庫中的更改。PersistenceContext在CMT似乎PersistenceContext的不同在BMT

在我的骨髓移植方法的過程完成後,我回到我的CMT豆。我從PersistenceContext中重新獲取(.find()方法)我的對象(因爲BMT bean改變了一些值),但我仍然得到了我的對象的舊值。我甚至嘗試過.refresh()方法,但數據沒有更新。

是否有可能在CMT和BMT豆使用不同的PersistenceContext?

+0

你有沒有試着用'getReference(entityClass,PK)' –

回答

1

持久化上下文經由運行的事務傳播,並且在除了用於正常的持久性的上下文(例如非擴展)其L1高速緩存的壽命時間的作用範圍是相同的事務。

所以,如果你在你的BMT豆開始一個新的事務,其持久化上下文進行交互,然後提交,那麼確實是調用CMT bean將不會在其持久化上下文的更新值。

從數據庫中讀取新值應該可以工作。因此,如果您在數據庫中看到這些更改,尤其是在同一應用程序中部署了CMT和BMT bean(因此不存在L2不一致效應),則實際上應該可以使用refresh

在對CMT bean的新調用中會發生什麼?它會看到更新的值嗎?

+0

阿爾揚喜。在對CMT bean的新調用之後,值更新爲yes!但我希望他們在第一個電話中更新。 瞭解整個問題。我有一個對象具有一組「Field」類型的對象的文檔。 (Field f:document.getFields()){ Query q = getEntityManager()。createQuery(「Select f From Field where f.document =:document」)所以在調用BMT bean之後,我會這樣做: ; Field f =(Field)query.getSingleResult(); getEntityManager()。refresh(f); } –

相關問題