Spring Hibernate:@Transaction(REQUIRES_NEW)没有捕获异常

时间:2017-03-20 19:57:54

标签: java spring hibernate spring-transactions propagation

A.java

try{
for(i=1;i<=5;i++){
List<Integer> intList = new ArrayList();
bService.executeMethod(i,intList);
}
}catch(Exception e){
 logger.error("exception occoured {}",e);
}

B.java

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void executeMethod(int i, List<Integer> intList){
try{
.......dostuff;
}catch(Exception e){
strList.add(i)
}
}

如果出现问题,执行任何迭代的executeMethod(),让i = 2(如果发生了一些hibernate异常,它没有被catch块捕获),代码应该继续执行其余的迭代值i = 3到i = 5。

什么样的exeption将会被catch块捕获(如使用Excetion类),但它没有发生。我不知道为什么会这样,有人可以帮我解决这个问题。

正在抛出OptimisticLockException并且不执行其余的迭代它将被终止

1 个答案:

答案 0 :(得分:1)

您确定没有遇到交易异常吗?如果doStuff中发生了某些事情,它可能会破坏交易,将其标记为无效。离开executeMethod后,Spring会尝试提交事务,然后失败,抛出另一个异常(在代理中)。

如果是在调试级别,您应该始终记录异常。此外,如果要捕获事务性异常,则必须在调用者中执行此操作。

通过代理抛出的异常将正确回滚事务。由于你捕获并忽略它,错误被“隐藏”到Spring。