Spring + Hibernate 如何防止回滚

标签 spring hibernate transactions

我有一个使用此方法的代码块:

@Transactional(noRollbackFor=Exception.class)
public synchronized Object saveData(){
    //...
    dao.insert(entity);
    //...
}

我的 dao 类被标记为 ad Transactional

@Transactional
public class Dao {
   //...
   public <T> void insert(T obj) throws Exception {
    getSession().saveOrUpdate(obj);
   }
}

我需要防止该 block 内发生任何回滚。但是我得到了这个:

2014-02-25 20:47:44 [WARN]SqlExceptionHelper:143    SQL Error: 1205, SQLState: 41000
2014-02-25 20:47:44 [ERROR]SqlExceptionHelper:144   Lock wait timeout exceeded; try restarting transaction
2014-02-25 20:47:44 [ERROR]BigliettiService:?   Transazione in errore
org.hibernate.exception.GenericJDBCException: Lock wait timeout exceeded; try restarting transaction
...
2014-02-25 20:47:44 [ERROR]JsonHandlerExceptionResolver:?   Transaction rolled back because it has been marked as rollback-only

为什么最后我发现事务回滚了?

最佳答案

上周我也遇到了类似的问题。就我而言,是来自不同方法的另一个 @Transactional 注释导致事务被标记为仅回滚。

你检查过了吗?

编辑:为了更清楚地说明这一点,您没有从 saveData() 方法内部发布代码。对我来说导致此错误的原因是从我的方法内部使用 @Transactional (缺少 noRollback 属性)调用另一个方法,在您的情况下是 saveData()

关于Spring + Hibernate 如何防止回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22071282/

相关文章:

Spring 和条纹安全设计

Java-hibernate是否支持审核模式和历史记录支持?

java - 捕获 OptimisticLockingException 会毁掉数据库事务吗?

java - 用于 HA 的 Neo4j-ogm X-Write header 管理

java - 如何使用 @Transactional 注释测试方法

java - 是否可以使用 Jackson 附加属性进行序列化?

java - Spring 3MVC : @ModelAttribute method + @Autowired not working

java - HQL 可完美运行嵌套 SQL

mysql - 1 个查询的 SQL 3 关系

java - 当 JMS Prod 位于辅助 POJO 类中时,如何在事务中包含 JMS Producer