【发布时间】:2012-06-28 19:08:15
【问题描述】:
首先,this 解决方案不适合我,因为我无法更改持久性单元。
我的问题是我使用了一个 JTA EntityManager,但我只需要一个用例,比如事务:
public boolean saveWithResult(PointsValidityPeriod pointsValidityPeriod)
{
//TODO use transaction here
super.save(pointsValidityPeriod);
if (updatePrevious(pointsValidityPeriod.getValidFrom()) != 1)
{
logger.error("Update of Period was not possible, because UPDATE returned no single result.");
return false;
}
pointsValidityPeriodEvent.fire(pointsValidityPeriod);
return true;
}
保存方法(我无法更改):
public void save(T entity)
{
getEntityManager().persist(entity);
}
你看,有一个保存调用,但是如果更新出错,这个保存必须回滚,那么我该如何实现呢?有什么想法吗?
【问题讨论】:
-
JTA 的全部意义在于管理事务。您在哪个环境中执行您的应用程序?具有 EJB 的应用程序服务器?然后使用 EJB 来划分事务:这是他们的重点。
-
默认情况下,EJB 是事务性的。默认情况下,EJB 方法中的所有代码都在事务中执行。
-
我更改了方法调用。如果我在 saveWithResult 方法中说
if (updatePrevious() == 2) { => don't invoke save.},那么 updatePrevious 将不会回滚,所以 UPDATE 已经执行但 INSERT (save) 没有,那么这是事务性的吗?我不明白。
标签: java transactions jpa-2.0 entitymanager jta