各位,
下面的方法是使用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)是否能保证这种情况的发生。
1条答案
按热度按时间sr4lhrrt1#
@Transactional
将检测在您的方法中抛出的任何未检查的异常,并且您的事务将被标记为仅回滚。我认为@Transactional(rollbackFor = Exception.class)
在您的情况下是不必要的,因为所有可能抛出的异常都是RuntimeException
。另外,你的
EntityManager
需要Spring注入,如果不是这样,让Spring注入EntityManager
。下面是一个如何让Spring注入bean的示例: