首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring:如何回滚声明性事务

Spring:如何回滚声明性事务
EN

Stack Overflow用户
提问于 2015-10-06 08:33:56
回答 2查看 1.1K关注 0票数 0

在这个例子中,如果一个条件被验证,我不知道如何回滚事务。这是一个带有JPA + Hibernate的Spring应用程序,用于持久性

在CartController中:

代码语言:javascript
复制
@RequestMapping(value="/buy",method=RequestMethod.POST)
  public String buy(){
  CartDAO.buy();
  return "redirect:/";
 }//buy

在CartDAOImpl中

代码语言:javascript
复制
@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中

代码语言:javascript
复制
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>

解决这个问题的最好办法是什么?对不起我的英语

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-06 09:45:51

您可以在@Transactional中声明,当抛出MyException时,您希望Spring执行回滚:

代码语言:javascript
复制
@Transactional(rollbackFor=MyException.class)
票数 1
EN

Stack Overflow用户

发布于 2015-10-06 08:49:16

关于回滚声明性事务的Spring文档:

在其默认配置中,Spring的事务基础结构代码仅在运行时、未检查的异常中标记回滚事务;也就是说,当抛出的异常是RuntimeException的一个实例或子类时。(在默认情况下,错误还会导致回滚)。从事务性方法引发的检查异常不会导致默认配置中的回滚。 您可以精确地配置哪些异常类型标记事务以进行回滚,包括选中的异常。下面的XML片段演示如何为选中的、特定于应用程序的异常类型配置回滚。

来源:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/transaction.html#transaction-declarative-rolling-back

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32965259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档