2015-09-04 104 views
1

续订回滚在我的事务中不起作用。在原始查询中将事务回滚事务回滚不起作用

这是一个例子代码:

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 TRANSACTION ISOLATION LEVEL SERIALIZABLE;

执行(默认):DELETE FROM任务WHERE ID = 6

执行(aaf94974-d646-4056-9cfa-0c53f1b1b3e3):ROLLBACK;

但是回滚不起作用。

回答

1

这在sequalize文档中没有描述,但我找到了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 
})