【发布时间】:2015-07-17 21:03:38
【问题描述】:
我需要在一个事务中管理 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;
}
与此方法类似,还有另一种方法可以从其他表中删除数据。
【问题讨论】:
-
是的。使您的服务方法具有事务性。这是典型的做法。为什么您的服务层还不是事务性的?你的代码在哪里?
-
我的服务层已经是事务性的,但我发现的问题是回滚没有发生,我认为原因是@Transactional 支持实体持久性而不是行插入。我已经发布了代码。
-
你所说的“失败”到底是什么意思?因为上面的代码捕获了所有可能发生的异常并忽略它们,从而有效地防止了事务在抛出异常的情况下回滚。
标签: spring hibernate spring-mvc spring-transactions native-sql