如何在单个事务中管理 2 个 DAO 方法?
How to manage 2 DAO methods in a single transaction?
我需要在单个事务中管理 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;
}
与此方法类似,还有另一种方法可以从其他 table.
中删除数据
在调用这些 DAO 方法的服务方法上添加 @Transactional
。 This 文章很好地总结了它的工作原理。
它不会回滚,因为你正在捕获异常。
Spring 的事务管理通过@Transactional AOP 检测到的退出事务边界的异常来工作。
如果您捕获到 sql 日志记录异常或其他异常,您必须重新抛出或抛出新异常才能开始回滚。
我需要在单个事务中管理 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;
}
与此方法类似,还有另一种方法可以从其他 table.
中删除数据在调用这些 DAO 方法的服务方法上添加 @Transactional
。 This 文章很好地总结了它的工作原理。
它不会回滚,因为你正在捕获异常。 Spring 的事务管理通过@Transactional AOP 检测到的退出事务边界的异常来工作。
如果您捕获到 sql 日志记录异常或其他异常,您必须重新抛出或抛出新异常才能开始回滚。