我是Spring JDBC的新手。我创建了具有一样的界面,一个DAO:如何在Guice中使用Spring JDBC中的事务
@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你最终得到了什么地方?我正在使用Guice作为DI,并希望使用Spring JDBC +交易 – Alden