我正在使用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?
}
答案 0 :(得分:2)
简单的Jdbc模板无法控制您是否在事务中。此page显示了使用注释来控制事务设置的示例。
通常,您正在从服务类型方法进行多个DAO / jdbc模板调用。该方法为事务添加了注释,因此您的jdbc模板代码可以专注于它的设计目的 - 访问数据库。
答案 1 :(得分:0)
当然,您应该使用Spring声明式事务。这是一个方面,不是简单JDBC模板的一部分。