将@Transactional与“ jpaApi.withTransaction”混合存在问题吗?

时间:2019-05-28 20:07:36

标签: java playframework playframework-2.0

我在使交易在我的Play应用程序中正常工作时遇到了一些麻烦,并且我的代码的结构使我无法花时间在Play框架文档中显示“适当”地完成交易。

仅使用@Transactional是不够的,因为由于某些原因,当我抛出自己的异常时它不会回滚。

这就是我设法使交易成功的方式:

@Transactional
public Result myAction() {
    try {
        return ok(Json.toJson(myServiceClass.doStuff()));
    } catch (BusinessRuleException e) {
        return badRequest(Json.toJson("error"));
    }
}

...

public class MyServiceClass {
    public Bill doStuff() throws BusinessRuleException {
        return jpaApi.withTransaction(() -> {

               //...do a bunch of stuff here

        });
    }
}

这样可以吗?以后由于某种原因会引起问题吗?

1 个答案:

答案 0 :(得分:0)

内在的

@TransactionalJPAApi.withTransaction创建了新的实体管理器实例。该实体经理充当工作单元。在这种情况下,您将遇到两个未连接的正在运行的事务。因此,我认为最好不要混合使用这两种方法并选择其中一种。