java - 将 @Transactional 与 "jpaApi.withTransaction"混合有问题吗?

标签 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

        });
    }
}

这样可以吗?以后会因为某种原因导致问题吗?

最佳答案

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

关于java - 将 @Transactional 与 "jpaApi.withTransaction"混合有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56349400/

相关文章:

javascript - 将 fluentlenium 与动态生成的内容一起使用时出现问题

Play Framework:加载和使用常量字符串的最佳解决方案

playframework-2.0 - 在 Play Framework 2.x 中手动调用表单验证

playframework-2.0 - 访问游戏! 2.0 application.conf 中的配置变量?

java - 任何人都知道一个 WeakReferenceCollection 来保存听众

java - Lombok @Builder 继承同时为 parent 和 child 工作

java - 桥接方法创建

java - 以编程方式编译java文件

scala - Akka 和 Play on Heroku : Should I have my actors on seperate dyno or in the web dyno?

java - 需要从js发送json数据到java