2015-09-04 3 views
1

Sequelize rollback не работает над моей транзакцией.Sequelize откат транзакций по необработанным запросам не работает

Это пример кода:

return sequelize.transaction({ 
     isolationLevel: "SERIALIZABLE", 
     autocommit: false 
    },function (t) { 

     return sequelize.query('DELETE FROM Task WHERE id=:id', 
     { 
     replacements:{"id":id}, 
     type: sequelize.QueryTypes.SELECT 
     }) 
     .then(function() { 
     // the query was successful but I still want to roll back 
     t.rollback(); 
     }); 
    }); 

Я проверил консоль:

Отработка (aaf94974-d646-4056-9cfa-0c53f1b1b3e3): START TRANSACTION;

Выполнение (aaf94974-d646-4056-9cfa-0c53f1b1b3e3): SET SESSION Уровень изоляции транзакций SERIALIZABLE;

Выполнение (по умолчанию): DELETE FROM Задача WHERE ID = 6

Выполнение (aaf94974-d646-4056-9cfa-0c53f1b1b3e3): ROLLBACK;

Но откат не работает.

ответ

1

Это не описано в документации по последовательности, но я нахожу usage example in sequalize tests.

return this.sequelize.query(query, { transaction: t }).bind(this).then(function() { 
    return this.User.create({ name: 'foo' }); 
}) 

Итак, вам просто нужно пройти transaction опцию в query вызова:

return sequelize.query('DELETE FROM Task WHERE id=:id', 
{ 
    replacements:{"id":id}, 
    type: sequelize.QueryTypes.SELECT 
}) 
Смежные вопросы