假设我的项目中有以下结构(我使用 iBatis 作为 DAO):
public class UsersManager {
public void do {
mySqlMapClient.startTransaction();
// my code here
mySqlMapClient.endTransaction();
mySqlMapClient.commitTransaction();
}
}
public class StatsManager {
public void do {
mySqlMapClient.startTransaction();
// my code here
mySqlMapClient.endTransaction();
mySqlMapClient.commitTransaction();
}
}
public class App {
public void do {
myUsersManager.do();
myStatsManager.do(); // here I get an exception, because the transaction is already started
}
}
所以,我的问题是,我该如何解决这个问题?我的项目中有 150 多笔交易,因此重写所有业务逻辑并非易事。是否有针对此类情况的标准方法?我应该关注哪里?
最佳答案
正是出于这个原因,您不应该在 DAO 中使用事务逻辑。
通常有一个服务层拥有数据库连接和工作单元。它启动事务,调用所有参与的 DAO,并在事务完成后进行清理。
Spring 框架使用方面来实现事务逻辑。您将拥有所有这些 DAO 的接口(interface)。 Spring 将生成一个以声明方式处理事务的代理。也许您可以使用其中的一些设计概念,即使您不使用 Spring。
或者只学习Spring。它很好地支持 iBatis。
关于java - 如何使用 iBatis 解决嵌套事务问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4214888/