Question

Dans le cadre d'une application web, je suis en train de construire un processus d'inscription. après la validation du processus, il y a trois statments sql à effectuer. Le cas échéant devrait échouer alors ils devraient tous être annulées. Toutefois, si j'écris volontairement le 3 sql à l'échec (utiliser un nom de table qui exist ne marche pas). Je vois exception étant jeté, mais les 1er et 2ème statments SWL ne sont pas annulées.

conseils de quelqu'un peut me sur la façon dont cela devrait être fait.

de mon application context.xml

    <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 /> 

Ma classe de service d'enregistrement

public class Registration implements IRegistration {
@Autowired JdbcUserDao userDAO;

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

ma méthode d'enregistrement userDAO

    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;
}

exampl d'exception levée

    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

Quelqu'un peut-il me dire ce que je l'ai manqué. Pourquoi quand le 3ème sql statment échoue faire les 2 autres opérations ne se révulsés?

Était-ce utile?

La solution

Parce que vous attrapez l'exception dans votre OAC, il n'est pas jeté à TransactionManager.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top