【发布时间】:2013-06-05 22:06:56
【问题描述】:
我是 Spring JDBC 的新手。我创建了一个 DAO,其界面如下:
@ImplementedBy(StuffDAOImpl.class)
public interface StuffDAO {
void createStuff(StuffDTO stuffDTO);
@Transactional
void updateStuff(StuffDTO stuffDTO);
}
如何将 updateStuff 配置为事务性的,例如,如果方法中有两个更新:
@Override
@Transactional
public void updateStuff(StuffDTO stuffDTO) {
String query = "UPDATE stuff SET (name, username, password) = (?, ?, ?) WHERE rowid = 10";
getJdbcTemplate().update(query, new Object[]{"John", "john", "12345"});
// This will fail
try {
String wrongquery = "UPDATE tablenotexist SET (name, username, password) = (?, ?, ?) WHERE rowid = 10";
getJdbcTemplate().update(wrongquery, new Object[]{"John", "john", "12345"});
}catch (BadSqlGrammarException e) {
// IGNORE
}
}
在上面的示例中,第二个查询将失败,因为它试图更新一个不存在的表。我认为通过将这种方法声明为一项事务,它应该达到目的。但是它似乎不起作用。
如果此方法运行,我如何使查询也回滚?
顺便说一下,我使用Guice而不是Spring来做DI。
非常感谢
【问题讨论】:
-
如果你说它没有回滚,那么
@Transactional配置不正确。 -
@Kevin 你最终得到了这个结果吗?我正在为 DI 使用 Guice,并希望使用 Spring JDBC + 事务
标签: java jdbc spring-jdbc