【发布时间】:2021-04-05 16:53:10
【问题描述】:
我将 Sequelize 与 Postgres 12.4 一起使用,我更喜欢使用 UUID 而不是顺序 ID,尽管这总是会导致 any ORM 令人头疼。我以前通过使用设置随机 UUID 的 beforeCreate 钩子来完成这项工作,但是如果您需要执行 upserts,这种方法会变得非常复杂,我会这样做,所以我试图让 Postgres 为我生成 UUID。我现在使用以下 sequelize 属性定义来工作:
id: { type: Sequelize.UUID, primaryKey: true, defaultValue: Sequelize.literal('gen_random_uuid()') },
现在的问题是,如果我尝试使用 MyModel.create({name: "asdf"}) 创建新对象,Sequelize 将尝试更新插入包含设置为 null 的 id 字段的行。这类似于this StackOverflow question 中描述的问题,但那里提出的解决方案仅对顺序数字 ID 有效。我还阅读了一些建议,包括在 Sequelize 接口级别设置 omitNulls 字段,但在很多情况下我需要用 null 覆盖值,因此设置这样的全局配置对我来说不是一个可行的解决方案。
我尝试在字段级别设置此配置,但 Sequelize 今天似乎不支持此配置。可能有另一个名称的类似选项,但 Sequelize API 参考实际上似乎没有包含任何可以包含在属性定义中的可能字段的明确文档 - 它只是说它可以是字符串或对象, 没有进一步的说明,所以我只能通过可用的示例进行,这些示例似乎没有显示任何此类内容。
有什么方法可以指示 Sequelize 我的主键字段将由数据库管理并且应该从不设置,而不告诉 Sequelize 该字段是数字和顺序的?
【问题讨论】:
标签: node.js sequelize.js