【发布时间】: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