2012-10-14 58 views
2

我正在使用Spring simplejdbctemplate插入/更新一堆基于if/else块。使用jdbctemplate插入/更新

我想知道是否有办法将所有这些操作合并到一个事务中。目前,如果我的代码中断(出于某种原因),那么某些插入被执行,而某些不是。如果有任何失败,我希望整个事情都会失败。像SQL中的回滚一样。

这是可能做到simplejdbctemplate?

该链接并没有帮助我,因为我不明白我可以放置在哪里@Transaction。我正在粘贴下面的代码,@Transaction注释会在下面的代码中出现?

更新

代码:

for (Colors c : colors) { 
     if (isColorExistsInOtherDb(c)) { 
      if (!isColorExistsAlready(c)) { 
       insertIntoColor(c); 
       colorId = getMaxColorId(); 
      } 
     else { 
      updateColor(c); 
      colorId = getColorIdByShade(c); 
     } 


     for (Shade s : c.getShades()) { 
      colorId = colorService.isShadeExistsForColor(colorId, s.getShadeId()); 
      if (colorId <= 0) { 
       colorService.insertIntoColor(s); 
       colorId = colorService.getMaxColorId(); 
      } 
      else { 
       colorService.updateColor(colorId, c); 
      } 


       insertMachinePoam(machineId, poamId); 
      } 
     } 
     else { 
      //do something else? 
     } 

回答

2

简单的JDBC模板不会管你是否在一个事务中。该page显示了使用注释来控制事务设置的示例。

通常,您正在从服务类型方法调用多个DAO/jdbc模板调用。该方法为事务注释,以便您的jdbc模板代码可以专注于它的设计目的 - 访问数据库。

+0

+1正好。 – duffymo

+0

我提供了更新。该链接使我误以为在哪里放置'@ Transaction'注释 – birdy

+0

您发布的代码是什么类/方法?注释会去那里。如果这个类还不是Spring bean /组件,那么你也需要做一个。 –

0

当然,你应该使用Spring声明式事务。这是一个方面,而不是简单JDBC模板的一部分。