jpa 在查询引发异常时回滚事务

oalqel3c  于 2023-02-09  发布在  其他
关注(0)|答案(1)|浏览(221)

各位,
下面的方法是使用JPA的事务的一部分。我正在尝试发现如何在这个方法中添加一个功能,以便当方法中的查询抛出异常时,所有事务都回滚。
在这种情况下,我可以做什么?下面是代码:

@Transactional
public void deleteDadosSExecReenvCancelada(Long nuSeqConsecao){
        try{

            StringBuilder query = new StringBuilder();
            query.append(" DELETE FROM sigpc_fnde.s_execucao_financ_gru_reenv where NU_SEQ_EXEC_FINANC_REENV in (SELECT NU_SEQ_EXECUCAO_FINANCEIRA FROM sigpc_fnde.s_exec_financ_reenv where NU_SEQ_CONCESSAO = ?)");

            getEntityManager().createNativeQuery(query.toString()).setParameter(1, nuSeqConsecao).executeUpdate() ;

            StringBuilder sql = new StringBuilder();
            sql.append(" DELETE FROM  sigpc_fnde.s_exec_financ_reenv where NU_SEQ_CONCESSAO = ?");
            getEntityManager().createNativeQuery(sql.toString()).setParameter(1, nuSeqConsecao).executeUpdate() ;

        } catch (Exception e){
            e.getCause();
        }

    }

我想知道Annotation @Transactional(rollbackFor=true)是否能保证这种情况的发生。

sr4lhrrt

sr4lhrrt1#

@Transactional将检测在您的方法中抛出的任何未检查的异常,并且您的事务将被标记为仅回滚。我认为@Transactional(rollbackFor = Exception.class)在您的情况下是不必要的,因为所有可能抛出的异常都是RuntimeException
另外,你的EntityManager需要Spring注入,如果不是这样,让Spring注入EntityManager
下面是一个如何让Spring注入bean的示例:

@RequiredArgsConstructor
class MyService {

...

    @PersistenceContext
    private final EntityManager entityManager;

...

}

相关问题