Spring 如何在一个事务中管理2个DAO方法?
我需要在一个事务中管理2个Dao方法,其中任何一个失败都会回滚另一个。调用方法位于服务层。Spring和Hibernate原生sql查询中使用的技术。有没有办法做到这一点?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
调用方法::
@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查询。请在上面查找我的代码。