【问题标题】:Is there a problem in mixing @Transactional with "jpaApi.withTransaction"?将@Transactional 与“jpaApi.withTransaction”混合是否有问题?
【发布时间】:2019-05-28 20:07:36
【问题描述】:

在我的 play 应用程序中使事务正常工作时遇到了一些问题,并且我的代码的结构方式使我无法像 Play Framework 文档中所示的那样“正确”地完成它。

仅使用 @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

        });
    }
}

这样好吗?以后会不会因为某种原因引起问题?

【问题讨论】:

  • 您的自定义例外扩展RuntimeException?
  • 是的,它们扩展了 RuntimException。但似乎只有当我没有捕获异常时事务才会回滚,我必须能够捕获它才能向用户显示错误消息。

标签: java playframework playframework-2.0


【解决方案1】:

@TransactionalJPAApi.withTransaction 在后台创建实体管理器的新实例。该实体管理器作为工作单元。在这种情况下,您最终会得到两个未连接的正在运行的事务。所以我想最好不要混合这两种方法并选择其中一种。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-09
    • 2013-04-24
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 2020-07-20
    • 2011-02-09
    相关资源
    最近更新 更多