对我来说,完美的解决方案是插入一个带有一些子关联的父模型,并在级联上创建子关联。然而,当我开始使用 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/