JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Web Framework » Spring web MVC  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 @transavtional 釋疑
wangccwkimo





發文: 85
積分: 1
於 2017-10-03 14:19 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
請問各位前輩,目前遇到交易的 問題,以下是我的範例 code。

//TESTController


@Autowired
TESTService service;

@Controller
@RequestMapping("/test")
public class TESTController{
public ModelAndView TEST01(HttpServletRequest request) throws Exception {
    ModelAndView view= new ModelAndView("test");

//發生 runtimeexception 時不會rollback()
/*
service.insertAll();
*/

//發生 runtimeexception 時,會 rollback
    for(int i=0;i<10;i++){
      
      HashMap map = new HashMap();
      map.put("name", i+"");
      map.put("age", i+ "");
      try{
        service.insertData(map);
      }catch( RuntimeException e ){
        e.printStackTrace();
      }
    
    }



return view;
}

}



//TESTService


@Service
public class TESTService {
  @Transactional
  public void insertData(HashMap data){
    String sql = "insert into test1 (name,age) values ('" + data.get("name") + "'," + data.get("age") + ")";
    db.insert(sql);
    
    
    sql = "insert into test2 (name,age) values ('" + data.get("name") + "'," + data.get("age") + ")";
    db.insert(sql);
  }
  
  
  public void insertAll(){
    for(int i=0;i<10;i++){
      HashMap map = new HashMap();
      map.put("name", "姓名"+i);
      map.put("age", i+ "");
      try{
        insertData(map);
      }catch( RuntimeException e ){
        e.printStackTrace();
      }
    
    }
    
  }
}


情況1. 在 controller 內直接呼叫 TESTService.insertAll() ,該函式某次 for 迴圈 發生錯誤時,i跑到該次錯誤的 insertData() 不會 rollback 。

情況2. 在 controller 內 使用 for x10 迴圈呼叫 TESTService.insertData() , 則發生錯誤時,該次 insertData()的 資料會 rollback。

這二種差別在於 for 迴圈一個是在 service 做,另一個是在 controller 做,為何在 service 內的 transaction 會沒有做用,希望各位前輩給予指教,謝謝。

另如何讓 TESTService.insertAll() 的 每次交易可以 有作用,謝謝

ps: 我要的結果為 每個 insertData() 都是一次交易。 (每次交易寫入 2筆資料 ,發生交易失敗時,該2筆資料rollback)


wangccwkimo edited on 2017-10-03 23:43
reply to postreply to post
話題樹型展開
人氣 標題 作者 字數 發文時間
388 @transavtional 釋疑 wangccwkimo 2025 2017-10-03 14:19
» JWorld@TW »  Web Framework » Spring web MVC

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8