首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring @transactional rollingback

Spring @transactional rollingback
EN

Stack Overflow用户
提问于 2012-02-16 05:16:48
回答 1查看 568关注 0票数 2

作为web应用程序的一部分,我正在尝试建立一个注册过程。验证流程之后,需要执行三个sql语句。如果其中任何一个失败了,那么它们都应该被回滚。但是,如果我故意编写第三个sql失败(使用一个不存在的表名)。我看到异常被抛出,但是第一个和第二个swl语句没有回滚。

有人能建议我该怎么做吗?

从我的应用程序-context.xml

代码语言:javascript
复制
    <bean id="transactionManager" 
      class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <property name="dataSource" ref="dataSource"/>
    </bean>

    <bean id="userDAO" class="com.doyleisgod.golf.database.JdbcUserDao">
      <property name="dataSource" ref="dataSource"></property>
    </bean>

    <bean id="registration" class="com.doyleisgod.golf.services.Registration"/>

    <tx:annotation-driven /> 

我的注册服务类

代码语言:javascript
复制
public class Registration implements IRegistration {
@Autowired JdbcUserDao userDAO;

@Override
@Transactional (rollbackFor = Exception.class)
public boolean registerUser(Object command) {
    return userDAO.registerUser(command);
}
}

我的userDAO注册方法

代码语言:javascript
复制
    public boolean registerUser(Object command)  {
    try {
        setUserCommand(command);
        sql = "INSERT INTO users (USERNAME,PASSWORD, ENABLED)VALUES ('"+username+"', '"+EncryptedPassword+"', TRUE);";
        getSimpleJdbcTemplate().update(sql);

        sql = "INSERT INTO user_roles (USERNAME,AUTHORITY)VALUES ('"+username+"', 'ROLE_USER');";
        getSimpleJdbcTemplate().update(sql);

        sql = "INSERT INTO users_details (USERNAME,FIRST_NAME, LAST_NAME, EMAIL_ADDRESS, HANDICAP)VALUES ('"+username+"', '"+firstname+"', '"+lastname+"', '"+email+"', '"+handicap+"');";
        getSimpleJdbcTemplate().update(sql);

    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
        return true;
}

抛出异常的示例

代码语言:javascript
复制
    15-Feb-2012 21:13:48 org.springframework.jdbc.support.SQLErrorCodesFactory <init>
INFO: SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]
org.springframework.jdbc.BadSqlGrammarException: StatementCallback; bad SQL grammar [INSERT INTO users_details (USERNAME,FIRST_NAME, LAST_NAME, EMAIL_ADDRESS, HANDICAP)VALUES ('d', 'd', 'd', 'd', '0');]; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'golf.users_details' doesn't exist

谁能告诉我我错过了什么。为什么当第三个sql语句失败时,其他两个事务没有回滚?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-16 05:23:49

因为是在DAO中捕获异常,所以不会将其抛出到TransactionManager。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9301536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档