【问题标题】:Sequalize adds primary key to query implicitlySequelize 隐式添加主键查询
【发布时间】:2018-10-01 13:54:18
【问题描述】:

我正在使用 sequelize-typescript,它隐式地将主键列添加到所有创建查询中,这是一个问题,因为我不想自己设置这个 id(IDENTITY_INSERT 设置为 OFF)。

@Table({
  timestamps: false,
})
class Table extends Model<Table> {
  @PrimaryKey
  @Column
  MyId: string;
  @Column
  column: string;
}
table.create({column: 'value'});

这以查询结束:

sql: 'INSERT INTO [Table] ([MyId],[column]) OUTPUT INSERTED.* VALUES (NULL,'value');'

还有错误:

SequelizeDatabaseError: DEFAULT or NULL are not allowed as explicit identity values.

我需要得到的查询是:

INSERT INTO [Table] ([column]) OUTPUT INSERTED.* VALUES ('value');

非常感谢任何帮助!

【问题讨论】:

    标签: javascript database sequelize.js


    【解决方案1】:

    首先 - 移除 @PrimaryKey 装饰器。 将模型添加到续集实例后,请执行以下操作:

    Table.removeAttribute('id');
    

    现在 id 不会添加到查询中,但将用于在 select 方法中进行排序,因此请通过以下方式设置您自己的顺序:

    Table.findAll({where: {column: 'value'}, order: ['MyId']});
    

    当然,使用这意味着您的数据库知道哪一列是主键并自行递增。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-03
      • 2017-07-17
      • 1970-01-01
      相关资源
      最近更新 更多