原始查询的 Sequelize 事务回滚不起作用

Sequelize transactions rollback on raw queries doesn't work

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):开始交易;

正在执行 (aaf94974-d646-4056-9cfa-0c53f1b1b3e3):设置会话事务隔离级别可序列化;

正在执行(默认):DELETE FROM Task WHERE id=6

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

但是回滚不起作用。

这在 sequelize 文档中没有描述,但我发现 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
})