javascript - Sequelize,在不提交事务的情况下在插入后立即读取插入行的 id

标签 javascript mysql transactions sequelize.js

对我来说,完美的解决方案是插入一个带有一些子关联的父模型,并在级联上创建子关联。然而,当我开始使用 Sequelize 并且我确实设法让它工作时,到目前为止我需要插入数据并手动设置关联以使其工作。
基本上,在插入父行后,我需要能够获取自动递增的 id(由 mysql 管理的序列,而不是 sequelize),以便将该 id 作为外键分配给子实体。
理想情况下,我希望在事务中原子地执行所有内容,因此如果出现问题,我们会回滚所有内容。
话虽如此,除非我在插入后手动提交事务,否则我无法获取父实体的 id。有没有办法在事务提交之前读取值,一些脏读?
这是到目前为止的代码:

const ipiInterestedParty = {
            ip_base_nr: '118',
        };
    const transaction = await session.transaction();
    const instance = await IpiInterestedParty.create(ipiInterestedParty, {transaction});
    await transaction.commit();
        const createdWithId = await IpiInterestedParty.findOne({
            where: {ip_base_nr: '118'}
        });
这是我能够获得父 id 的唯一方法,但是,由于事务已经提交,以防之后出现任何错误,事务已提交且无法撤消,导致系统不一致.
请问有什么帮助吗?

最佳答案

通常,如果您在模型的 PK instance 中指明,则在执行模型的 create 方法后,您会获得带有主键值的 autoIncrement: true
这样你就已经有了一个 parent 记录的 id 来创建子记录。不要忘记将事务对象传递给在事务中创建 CRUD 的所有方法。

关于javascript - Sequelize,在不提交事务的情况下在插入后立即读取插入行的 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63922766/

相关文章:

javascript - 优化重定向代码

firebase - 交易可以用于收款吗?

mysql - sql-连接两个表但保留第一个表中的所有列

asp.net - SQL 事务 : Best Way to Implement in ASP. 网络

javascript - 三个 div 并排导致问题

Javascript nodeValue 不接受新变量

javascript - jQuery 验证插件过早显示验证消息

mysql - SQL 分组合并未按预期工作

php - 打印 id 一次 PHP PDO