transactions - Sequelize - 在事务中插入多个关联实体失败

标签 transactions associations sequelize.js

我有两个模型:状态和状态参数。状态 'hasMany()' StatusParameter 和 StatusParameter 'belongsTo()' 状态。我想插入一个状态记录,然后插入多个与新状态关联的 StatusParameter 实体。我也想将所有插入都包装在一个事务中。我正在使用 Sequelize 2.0.5,所以这是我想出的:

return sequelize.transaction(function(t) {
    return Status.create({name: 'abc', value: 1 }, {transaction: t}).then(function(instance) {
        return sequelize.Promise.all(
            [sequelize.models.StatusParameter.create({statusId:instance.id, name: 'myParamName', value:123}, {transaction: t}),
            sequelize.models.StatusParameter.create({statusId:instance.id, name: 'myOtherParamName', value:345}, {transaction: t})
            ]);
        });
    }).then(function(){
      // Automatically comitted at this point if the promise chain returned to the transaction successfully resolved
      callback();
    }).catch(function(err){
      // Automatically rolledback at this point if the promise chain returned to the transaction was rejected
      callback(err);
    });

执行此代码片段将始终进入回滚场景,堆栈跟踪指向方言/mssql/query.js 第 66 行,并显示一条错误消息:无法读取未定义的属性“emit”

我不知道为什么我会得到这个,我查看了 query.js 代码,但无法弄清楚为什么在这种情况下未定义 promise 变量,特别是如果我只插入一个新的 StatusParameter 实体,一切正常。当我插入多个关联实体时,确实会出现错误。

谢谢!
菲尔

最佳答案

我尝试了最新的 sequelize 标签(不是发布),当时是 2.1.0,正如 Jan 所建议的,它工作得很好,但我只需要使用 Promise.map 和 {concurrency:1} 而不是 Promise.all 因为乏味(我在 MS SQL Server DB 上)提示同时执行两个查询,稍后会研究一下,看看我是否可以同时添加它们并获得一点性能提升。谢谢@jan!!

关于transactions - Sequelize - 在事务中插入多个关联实体失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29898203/

相关文章:

mysql - UPDATE.. WHERE... - 交易可以在两者之间发生吗

ruby-on-rails - Rails 嵌套属性关联验证失败

sql - 如何使用postgres获取日期

ruby-on-rails - 如何正确使用对同一模型有多个关联的工厂?

javascript - 使用 POST 方法多次获取错误响应 - NodeJS + Express + Sequelize with Promise

javascript - Sequelize 属于在一个查询中同时获取两种关系的多类

java - "Write operations are not allowed in read-only mode"错误 : confused with Spring @Service @transaction @Repository and Hibernate

java - 多战耳发现预绑定(bind) JDBC 连接

php - Mysql事务错误信息

ruby-on-rails - 铁路协会错误