我正在为 GlassFish 2.1.1(据我所知 JavaEE 5、JPA 1.0)编写一些应用程序。我的 servlet 中有以下代码(我主要是从 Internet 上的一些示例中借用的):
@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>
问题是,他们没有看到在另一个外部事务中所做的更改。粗略地说,我从 Web 浏览器向我的 servlet 发出请求,查看数据,在 SQL 控制台中执行一些 DML,重新加载 servlet 页面——它没有显示任何更改。我尝试使用em.flush
, 和utx.rollback
, and的许多组合em.joinTransaction
,但似乎没有任何好处。
由于我是 JPA 的新手,情况很复杂,所以我对底层机制的工作原理没有清晰的了解。因此,任何帮助以及 - 更重要的是 - 对那里发生的事情的解释/链接都将非常感激。谢谢!