如何使用带有guice的spring jdbc中的事务

yqkkidmi  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(277)

我对springjdbc是新手。我创建了一个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。
非常感谢

wpcxdonn

wpcxdonn1#

您使用的是springjdbc、spring事务,但是guice for di?为什么?你让事情变得比需要的复杂得多。
您的对象可能不是springbean,因为spring不会创建和注入它们,所以 @Transactional 没有效果:spring不创建和注入对象,所以它不创建和注入事务代理,所以注解从不被任何东西使用。

相关问题