@Transactional (noRollbackFor=RuntimeException.class)
public void methodA (Entity e){
service.methodB(e);
}
Run Code Online (Sandbox Code Playgroud)
---以下服务方式---
@Transactional (propagation=Propagation.REQUIRES_NEW, noRollbackFor=RuntimeException.class)
public void methodB (Entity e){
dao.insert(e);
}
Run Code Online (Sandbox Code Playgroud)
当dao.insert(e)in in methodB()导致主键违规并抛出a ConstraintViolationException,这是一个子类时RuntimeException,我希望事务仍然因为noRollbackFor我使用的属性而提交.但是我发现外部事务(on methodA)仍然被HibernateTransactionManager消息回滚
org.springframework.transaction.UnexpectedRollback异常:事务已回滚,因为它已被标记为仅回滚
我发现了类似的问题,但不完全是这个问题.