0

我目前在刷新 PersistenceContext 中的数据时遇到问题。我有一个 CMT EJB3 bean,它调用 BMT EJB3 bean。在 BMT bean 中,我对一个对象执行一些处理逻辑。我提交了更改,我可以看到数据库中的更改。

在我的 BMT 方法中完成该过程后,我返回到我的 CMT bean。我从 PersistenceContext 重新获取(.find() 方法)我的对象(因为 BMT bean 更改了一些值),但我仍然得到我的对象的旧值。我什至尝试了 .refresh() 方法,但数据没有得到更新。

CMT 和 BMT bean 是否可能使用不同的 PersistenceContext?

4

1 回答 1

1

持久性上下文通过正在运行的事务传播,除了正常的持久性上下文(例如,非扩展),其 L1 缓存的生命周期被限定在同一个事务中。

因此,如果您在 BMT bean 中启动一个新事务,与它的持久性上下文交互然后提交,那么调用 CMT bean 的持久性上下文中确实不会有更新的值。

不过,从数据库中读取新的值应该可以。因此,如果您在数据库中看到这些更改,特别是如果 CMT 和 BMT bean 都部署在同一个应用程序中(因此没有 L2 不一致影响),那么refresh实际上应该可以工作。

对 CMT bean 的新调用会发生什么?那么它会看到更新的值吗?

于 2012-05-26T08:56:41.617 回答