【问题标题】:using jdbctemplate for insert/update使用 jdbctemplate 进行插入/更新
【发布时间】:2012-10-04 22:43:01
【问题描述】:

我正在使用 Spring simplejdbctemplate 进行基于 if/else 块的插入/更新。

我想知道是否有办法将所有这些操作合并到一个事务中。目前,如果我的代码中断(出于某种原因),则执行某些插入,而某些则不执行。我希望整件事都失败,如果有什么失败的话。就像 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?
        }

【问题讨论】:

    标签: java mysql spring-mvc spring-jdbc


    【解决方案1】:

    简单的 Jdbc 模板不控制您是否在事务中。这个page 展示了一个使用注释来控制事务设置的示例。

    一般来说,您从一个服务类型方法进行多个 DAO/jdbc 模板调用。该方法会为事务添加注释,因此您的 jdbc 模板代码可以专注于它的设计目的 - 访问数据库。

    【讨论】:

    • 我提供了更新。该链接让我不知道在哪里放置 @Transaction 注释
    • 您发布的代码是什么类/方法?注释会去那里。如果该类还不是 Spring bean/组件,那么您也需要将其设为一个。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-11
      • 2011-01-21
      • 2014-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-03
      相关资源
      最近更新 更多