繁体   English   中英

如何在Spring JDBC中使用Guice进行事务处理

[英]How to use transaction in Spring JDBC with Guice

我是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。

非常感谢

您正在使用Spring JDBC,Spring事务,但是Guice for DI? 为什么? 你制造的东西比需要的要复杂得多。

你的对象可能不是Spring bean,因为Spring不会创建和注入它们,所以@Transactional没有效果:Spring不会创建和注入对象,所以它不会创建和注入事务代理,所以注释是从未使用过任何东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM