我有一个使用Hibernate连接到数据库的JavaEE应用程序。在我的应用程序的某些部分中,我调用了具有@Transactional注释的方法。在某些情况下,我希望回滚整个事务(外部服务-方法调用和内部事务)。在某些情况下,我只想回滚内部服务方法调用(即回滚到在内部方法开始时定义的保存点)。
第一部分已经到位,但我对第二部分有一个问题。当我执行以下操作时,将得到一个"UnexpectedRollbackException“,其中包含”事务回滚“消息,因为它已被标记为只回滚。
@Service
public class OuterService{
@AutoWired
private InnerServcie innerService;
@Transactional
public void outer(){
try{
innerService.inner();
}catch(RuntimeException e){
//if i dont throw this up, it will give me the "UnexpectedRollbackException"
System.out.println("I cought a RuntimeException");
}
}
}
@Service
public class InnerServcie{
@Transactional
public void inner(){
//here we insert some data into db using hibernate
//but something goes wrong and an exception is thrown
}
}发布于 2013-11-25 17:27:17
Spring/Hibernate/Java中不支持嵌套事务。所以,要么整个事务是回滚的,要么内部事务实际上是一个新的、不同的事务,一旦成功就会提交,即使外部事务稍后回滚。
如果后者是您想要的,那么只需用
@Transactional(propagation = Propagation.REQUIRES_NEW)https://stackoverflow.com/questions/20198784
复制相似问题