В рамках веб-приложения я пытаюсь создать процесс регистрации.после проверки процесса необходимо выполнить три sql-отчета.Если что-то не получится, то все они должны быть откатаны.Однако, если я намеренно пишу 3-й sql, чтобы потерпеть неудачу (используйте имя таблицы, которая не существует).Я вижу, как выдается исключение, но 1-й и 2-й тесты SWL не откатываются.
Может кто-нибудь посоветовать мне, как это сделать.
из моего 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 />
Мой класс обслуживания регистрации
public class Registration implements IRegistration {
@Autowired JdbcUserDao userDAO;
@Override
@Transactional (rollbackFor = Exception.class)
public boolean registerUser(Object command) {
return userDAO.registerUser(command);
}
}
мой метод регистрации 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;
}
Пример выдачи исключения
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
Может кто-нибудь сказать мне, что я пропустил.Почему, когда не удается выполнить 3-й SQL-запрос, остальные 2 транзакции не возвращаются?