【问题标题】:How to rollback a transaction with a catched exception?如何回滚捕获异常的事务?
【发布时间】:2019-04-02 18:58:38
【问题描述】:

我有一个 Rest API,我想捕获所有异常,以便在引发错误时为客户端发送自定义消息。

我使用 try { ... } catch (Exception e) { ... } 捕获了异常,但是在这些模式下,不会执行回滚并且数据会被持久化。

@POST
@Transactional
public Response add(Foo foo) {
    try {
        Foo add = this.service.add(foo);

        return Response.status(CREATED)
                .entity(add)
                .build();
    } catch (Exception e) {
        return Response.status(BAD_REQUEST)
                .entity("Contact the support! Error: " + e.getMessage())
                .build();
    }
}

我想回滚事务,因为数据不正确。

【问题讨论】:

    标签: java jpa jta


    【解决方案1】:

    当您使用 @Transactional 时,它已经被处理好了。您不必自己进行回滚(这有点像 try-with-resources)。在tryfinally 子句中显式使用Transaction 时,您必须回滚事务。

    【讨论】:

    • 好的!但是,我该怎么做呢?
    • @essejoje 刚刚阅读了答案,@Transactional 已经回滚。你不需要做任何事情
    • 但是当我捕捉到异常时,回滚并没有运行。
    • 是的,它就是这样工作的。对不起,我假设,这是受控的。您需要重新抛出错误。如果你想要返回值,你必须使用Transaction。操作方法如下:docs.jboss.org/hibernate/orm/4.0/hem/en-US/html/…
    • 非常感谢!我抛出了 WebApplicationException,它回滚事务并让我为客户端发送消息。
    猜你喜欢
    • 2015-03-02
    • 1970-01-01
    • 2019-06-09
    • 2013-10-16
    • 2019-06-18
    • 2012-12-28
    • 2015-02-27
    • 2013-11-23
    • 1970-01-01
    相关资源
    最近更新 更多