Sequalize添加主键以隐式查询

时间:2018-10-01 13:54:19

标签: javascript database sequelize.js

我正在使用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');

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

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

Table.removeAttribute('id');

现在不会将ID添加到查询中,而是将其用于选择方法中的排序,因此您可以通过以下方式设置自己的订单:

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

当然,使用此方法意味着您的数据库知道哪一列是主键,并自行对其进行递增。