Spring 如何在一个事务中管理2个DAO方法?

Spring 如何在一个事务中管理2个DAO方法?,spring,hibernate,spring-mvc,spring-transactions,native-sql,Spring,Hibernate,Spring Mvc,Spring Transactions,Native Sql,我需要在一个事务中管理2个Dao方法,其中任何一个失败都会回滚另一个。调用方法位于服务层。Spring和Hibernate原生sql查询中使用的技术。有没有办法做到这一点? 调用方法:: @Transactional(传播=传播。必需) 公共字符串保存(AllowFileTypesFormbeanobj,哈希表全局) 调用方法1:: public boolean deleteData( String strTableName,String strWhereClause) { Se

我需要在一个事务中管理2个Dao方法,其中任何一个失败都会回滚另一个。调用方法位于服务层。Spring和Hibernate原生sql查询中使用的技术。有没有办法做到这一点?
调用方法::
@Transactional(传播=传播。必需)
公共字符串保存(AllowFileTypesFormbeanobj,哈希表全局)

调用方法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;
   }
public boolean deleteData(字符串strTableName,字符串strwhere子句){
Session Session=sessionFactory.getCurrentSession();
字符串strSqlQuery=null;
布尔删除=假;
strSqlQuery=“从人员中删除”+strwhere子句;
试一试{
Query Query=session.createSQLQuery(strSqlQuery);

if(query.executeUpdate()在调用这些DAO方法的服务方法上添加
@Transactional
。这篇文章很好地总结了它的工作原理。在调用这些DAO方法的服务方法上添加
@Transactional
。这篇文章很好地总结了它的工作原理。

在m您在哪里调用这些DAO方法。这篇文章很好地总结了它的工作原理。

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

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


如果捕获日志记录的sql异常或其他异常,则必须重试或抛出新异常以启动回滚。

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


如果捕获日志记录的sql异常或其他异常,则必须重试或抛出新异常以启动回滚。

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


如果捕获日志记录的sql异常或其他异常,则必须重试或抛出新异常以启动回滚。

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


如果您捕获了日志记录的sql异常或其他异常,您必须重新启动或抛出新异常以启动回滚。

是的。将您的服务方法设置为事务性。这是典型的做法。为什么您的服务层还没有事务性?代码在哪里?我的服务层已经是事务性的,但我发现的问题是回滚没有发生,我认为原因是@Transactional支持实体持久性而不是行插入。我已经发布了代码。你说的“失败”是什么意思确切地说?因为上面的代码捕获所有可能发生的异常并忽略它们,从而有效地防止事务在抛出异常时回滚。是的。使您的服务方法具有事务性。这是典型的做法。为什么您的服务层还没有事务性?您的代码在哪里?我的服务层已经是事务性的,但我发现的问题是回滚没有发生,我认为原因是@transactional支持实体持久性而不是行插入。我已经发布了代码。您所说的“失败”是什么意思确切地说?因为上面的代码捕获所有可能发生的异常并忽略它们,从而有效地防止事务在抛出异常时回滚。是的。使您的服务方法具有事务性。这是典型的做法。为什么您的服务层还没有事务性?您的代码在哪里?我的服务层已经是事务性的,但我发现的问题是回滚没有发生,我认为原因是@transactional支持实体持久性而不是行插入。我已经发布了代码。您所说的“失败”是什么意思确切地说?因为上面的代码捕获所有可能发生的异常并忽略它们,从而有效地防止事务在抛出异常时回滚。是的。使您的服务方法具有事务性。这是典型的做法。为什么您的服务层还没有事务性?您的代码在哪里?我的服务层已经是事务性的,但我发现的问题是回滚没有发生,我认为原因是@transactional支持实体持久性而不是行插入。我已经发布了代码。您所说的“失败”是什么意思确切地说?因为上面的代码捕获所有可能发生的异常并忽略它们,从而有效地防止事务在抛出异常时回滚。我添加了它,但它不适用于本机sql查询。请查找上面的代码。我添加了它,但它不适用于本机sql查询。请查找我的上面的代码。我添加了它,但它不适用于本机sql查询。请在上面查找我的代码。我添加了它,但它不适用于本机sql查询。请在上面查找我的代码。