0

我需要在一个事务中管理 2 个 Dao 方法,其中任何一个失败都应该回滚另一个。调用方法在服务层。Spring 和 Hibernate 原生 sql 查询中使用的技术。有没有办法做到这一点?
调用方法:: @Transactional(propagation= Propagation.REQUIRED) public String save(AllowFileTypesForm formBeanObj,Hashtable global)

调用方法1::

public  boolean deleteData( String strTableName,String strWhereClause)  {
      Session session = sessionFactory.getCurrentSession();                                  
      String strSqlQuery = null;
      boolean deleted=false;
      strSqlQuery = "DELETE FROM Persons where" + strWhereClause;
      try {
           Query query=session.createSQLQuery(strSqlQuery);  
            if (query.executeUpdate() <= 0) {
              throw new SQLException("No row deleted from table "      +strTableName);
        }
          else{
            deleted=true;
        }
    } 

          catch(Exception e){
          e.printStackTrace();
      }
      return deleted;
   }

与此方法类似,还有另一种方法可以从其他表中删除数据。

4

2 回答 2

2

它不会回滚,因为您正在捕获异常。Spring 的事务管理通过 @Transactional AOP 检测到的退出事务边界的异常来工作。

如果你捕获了一个用于日志记录的 sql 异常或某些东西,你必须重新抛出或抛出一个新的异常来启动回滚。

于 2015-05-07T11:45:35.270 回答
1

添加@Transactional调用这些 DAO 方法的服务方法。这篇文章很好地总结了它的工作原理。

于 2015-05-07T10:42:43.173 回答