簡體   English   中英

將Spring Transaction與Mybatis批處理一起使用

[英]Using Spring Transaction with Mybatis batch

我有一個@Transactional方法,該方法在一個通用的spring bean上調用另一個方法,該方法長期以來一直用於跨mappers執行batch操作。 現在的問題是,如果@Transactional方法中有錯誤 ,則不會回滾在batch上執行的DML,因為它們是在不同的會話上執行的,並且是它自己的事務。

public class HamsterRepo{
...

 @Autowired 
 BatchOperationBean<Hamsters> idioticBatchBean;
 @Transactional
 public void saveHamsters(List<Hamsters> hams){
  idioticBatchBean.executebatch("saveHamsters", hams);
 }
}
 public class BatchOperationBean<T>{
 @Autowired 
 SqlSessionFactory sqlFactory; 

 public void executebatch(String mapperId, List<T> ts){
  SqlSession sqlSession = 
  this.sqlSessionFactory.openSession(ExecutorType.BATCH,
                TransactionIsolationLevel.SERIALIZABLE); 
  try(sqlSession){
   for(T t in ts){
    sqlSession.update(mapperId , t);
   }
  sqlSession.commit();
  // Clean Up stuff and Exception Handling...
  }
 }
}

現在,有沒有辦法關聯兩個Spring Tx and SqlSessionFactory 將注入SqlSession而不是工廠幫助嗎? 還是有辦法從Spring Tx獲取SqlSession? 還是Spring中無需SqlSesion即可跨映射器識別和執行查詢的一種方法?

PS:使用Spring 4.1.7,Mybatis:3.4.4,Mybatis-spring:1.3.1

看起來像鏈接Spring Transaction和Mybatis SqlSession的方式是SqlSessionTemplate

與Spring事務管理一起使用的線程安全,Spring管理的SqlSession,可確保使用的實際SqlSession是與當前Spring事務關聯的那個。 另外,它管理會話生命周期,包括根據Spring事務配置根據需要關閉,提交或回滾會話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM