Spring jpa在回滚期间保存数据

时间:2014-10-16 16:56:46

标签: java spring hibernate jpa spring-data

我知道这个问题听起来很奇怪,但推理很简单。 我是使用Spring + Hibernate开发的服务器端应用程序。

我是一个自定义servlet:

@Transactional
@Component
public class ReceivingSms implements HttpRequestHandler {
...
...
...
@Override
    public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    ....reading data from parameters and store into the db....
    entityManager.persist(someEntities);

    //at some point I found that there is some error and I've to rollback the entire transaction
    if(error){
        //HERE I WANT TO SAVE A LOG ON DB
        throw new RuntimeException("Error");
    }
}

原因是:

  • 我正在读取到达servlet的参数
  • 我在db上存储了一些从这些参数派生的数据
  • 在某些时候,我知道存在错误,我无法完成此过程。所以我抛出一个RuntimeException来回滚整个事务
  • 返回之前,我想在db中保存一个特定的实体(一种日志)。另外,如果我尝试,这个持久性将从RuntimeException回滚

从这里我的问题:有一种方法可以在db中存储实体并回滚其余的事务吗?

由于

1 个答案:

答案 0 :(得分:2)

调用另一个事务服务,其方法使用

注释
@Transactional(propagation = Propagation.REQUIRES_NEW)

保存日志条目。