Spring Data 中的 rollbackFor 属性是否会在我执行 try catch 时起作用?

Will the rollbackFor attribute in Spring Data will work even if I do a try catch?

我正在阅读有关使用 JPA 时的 rollbackFor 属性的信息。

现在我的代码是这样的

@Transactional(readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
   public void newUser(User user) {
        try{
            userRepository.saveAndFlush(user);
        }catch(Exception e){
            //log exception
        }
        return;
    }

据我所知,rollbackFor 将在异常被捕获时工作...这是正确的方法吗?或者 try catch 不应该存在?

谢谢。

Transactional Annotation rollbackFor: Defines zero (0) or more exception classes, which must be subclasses of Throwable, indicating which exception types must cause a transaction rollback.

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/transaction/annotation/Transactional.html#rollbackFor--

此外,我们不应该 suppress/eat 事务方法中的异常,而是我们需要从方法中抛出异常以回滚数据库事务:

请在下面找到正确的实现方式:

     @Transactional(readOnly = false, 
      propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
      public void newUser(User user) throws Exception {
        try{
            userRepository.saveAndFlush(user);
         } catch(Exception e){
           throw new Exception("Unable to Save User Object ",e);
        }
     }

您还可以参考下面的link来处理事务注解的异常:

Best practices for rolling back transactions in Spring 3/Hibernate