我正在爲GlassFish 2.1.1(JavaEE 5,JPA 1.0,據我所知)編寫一些應用程序。我有我的servlet下面的代碼(我主要是從一些樣本借用互聯網上):EntityManager沒有看到其他交易中所做的更改
@PersistenceContext(name = "persistence/em", unitName = "pu")
private EntityManager em;
@Resource
private UserTransaction utx;
@Override
protected void doPost(...) {
utx.begin();
. . . perform retrieving operations on em . . .
utx.rollback();
}
web.xml
中有以下內容:
<persistence-context-ref>
<persistence-context-ref-name>persistence/em</persistence-context-ref-name>
<persistence-unit-name>pu</persistence-unit-name>
</persistence-context-ref>
的問題是,在EM沒有按」不會看到在另一個外部交易中所做的更改。粗略地說,我從Web瀏覽器向我的servlet發出請求,查看數據,在SQL控制檯中執行一些DML,重新載入servlet頁面 - 並且不顯示任何更改。我試過使用em.flush
,utx.rollback
和em.joinTransaction
的許多組合,但它似乎沒有任何好處。
由於我是JPA的總新手,情況很複雜,所以我不清楚底層機器是如何工作的。因此,任何幫助和 - 更重要的是 - 對那裏發生的事情的解釋/鏈接都將非常感激。謝謝!
「當你不使用JPA執行不同的事務操作,緩存也不再是最新的」 - 這是否意味着我曾使用過JPA修改上述案例中的數據(而不是一些外部工具),我會在重新加載servlet頁面後看到更改嗎? – 2010-12-11 17:21:57
@安迪,是的,你會的。 EntityManager實際上負責維護緩存。您可能會發現OpenEJB中的JPA概念指南 - http://openejb.apache.org/3.0/jpa-concepts.html非常有用。 – 2010-12-12 20:31:31