在这个例子中,如果一个条件被验证,我不知道如何回滚事务。这是一个带有JPA + Hibernate的Spring应用程序,用于持久性
在CartController中:
@RequestMapping(value="/buy",method=RequestMethod.POST)
public String buy(){
CartDAO.buy();
return "redirect:/";
}//buy在CartDAOImpl中
@Transactional
public class CartDAOImpl implements CartDAO {
@PersistenceContext
private EntityManager em;
public void buy(){
....
if(x !=y) throw new MyException();
em.persist(Item);
....
}
}在applicationContext-servlet.xml中
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>解决这个问题的最好办法是什么?对不起我的英语
发布于 2015-10-06 09:45:51
您可以在@Transactional中声明,当抛出MyException时,您希望Spring执行回滚:
@Transactional(rollbackFor=MyException.class)发布于 2015-10-06 08:49:16
关于回滚声明性事务的Spring文档:
在其默认配置中,Spring的事务基础结构代码仅在运行时、未检查的异常中标记回滚事务;也就是说,当抛出的异常是RuntimeException的一个实例或子类时。(在默认情况下,错误还会导致回滚)。从事务性方法引发的检查异常不会导致默认配置中的回滚。 您可以精确地配置哪些异常类型标记事务以进行回滚,包括选中的异常。下面的XML片段演示如何为选中的、特定于应用程序的异常类型配置回滚。
https://stackoverflow.com/questions/32965259
复制相似问题