【问题标题】:Sequelize js transaction on destory and bulkCreate not rolling back在 destory 和 bulkCreate 上续集 js 事务不回滚
【发布时间】:2018-01-29 09:20:57
【问题描述】:

我正在尝试在批量创建/插入新报告之前删除所有报告详细信息。问题是当 bulkCreate 出现错误时,它不会回滚。它应该恢复被破坏的report_details,但它不起作用。

我测试此事务代码的方式是插入report_details,然后手动更改一个column 名称,以便在再次插入时出现列错误。并且事务应该回滚,但实际上 report_details 已被销毁,并且在 bulkCreate 错误时它不会带回已销毁的 report_details 有人可以看看我的代码。我在谷歌上搜索我的语法是正确的。 以及如何在我的机器上测试交易?除了更改列名,还有其他方法会产生错误吗?

function saveReportsDetails(results) {
db.report_detail.bulkCreate(results.report.objAllReportsDetail);

    return db.snpreq.transaction(t => {
        // transaction block
        return db.report_detail.destroy({
            where: {
                profile_id: results.profile.data[0].id
            }
        }, {
            transaction: t
        }).then(deleted => {
            console.log('*******TRANSACTION DELETED*********');

            return db.twenreport_detail.bulkCreate(results.report.objAllReportsDetail, {
                transaction: t
            }).then(reports_created => {
                console.log('*******TRANSACTION bulk created*********');
            });
        });
    }).then(transaction => {
        console.log('********All Transaction********');
    }).catch(err => {
        console.log('*******ROLL BACK*********');
    });
}

【问题讨论】:

  • 如果我添加throw new Error()在事务批量创建成功代码进入catch并打印回滚但仍然销毁report_details不会回来

标签: postgresql transactions sequelize.js mean-stack sequelize-cli


【解决方案1】:

m 代码语法有错误。在删除事务中,它需要 transaction: t 在单个参数中 像这样

return db.twentythree_and_me_report_detail.destroy({
            where: {
                profile_id: results.profile.data[0].id
            },
            transaction: t
        })

我没有收到任何类型的语法错误或任何其他错误。所以,我一直在搜索并找到答案

【讨论】:

    猜你喜欢
    • 2019-08-27
    • 1970-01-01
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 2011-09-19
    相关资源
    最近更新 更多