在 node 中将乐观锁定设置为全局选项,sequelize

cod*_*bot 6 node.js sequelize.js

我正在尝试在我的节点项目中设置续集,现在我有

//sequelize init
const { DataTypes } = Sequelize;
const sequelize = new Sequelize({
  database: database,
  username: user,
  host: server, 
  password: password,
  dialect: 'mssql',
  dialectOptions: {
    options: {
      useUTC: true,
      dateFirst: 1,
    }
  },
  define:{
      timestamps:false,
      paranoid:false,
      freezeTableName: true
  }
});

//and my Model 
  const User= sequelize.define('User', {
    // attributes
    id: {
      field:'Id',
      type: Sequelize.INTEGER,
      allowNull: false,
      primaryKey: true
    } ,
    startTime: {
      field:'startTime',
      type: Sequelize.DATE
    } 
  });
Run Code Online (Sandbox Code Playgroud)

我尝试设置version:true以启用乐观锁定 我把它放在模型中

  const Vessel = sequelize.define('FDMData', {
    // attributes
    id: {
      field:'vesselId',
      type: Sequelize.INTEGER,
      allowNull: false,
      primaryKey: true
    } ,
    startTime: {
      field:'startTime',
      type: Sequelize.DATE
    } 
  },{
    version:true
   }
);
Run Code Online (Sandbox Code Playgroud)

我得到 Unhandled rejection SequelizeDatabaseError: Invalid column name 'version'.

我还尝试在初始化时将其设置为全局

const { DataTypes } = Sequelize;
const sequelize = new Sequelize({
  database: database,
  username: user,
  host: server, 
  password: password,
  dialect: 'mssql',
  dialectOptions: {
    options: {
      useUTC: true,
      dateFirst: 1,
    }
  },
  define:{
      timestamps:false,
      paranoid:false,
      freezeTableName: true,
      version: true
  }
});
Run Code Online (Sandbox Code Playgroud)

再一次,我得到 Unhandled rejection SequelizeDatabaseError: Invalid column name 'version'.

我错过了什么?我怎样才能解决这个问题?

谢谢

mou*_*090 4

当您设置version: true并手动创建数据库结构时,sequelize 期望找到version表上命名的列:因此version INTEGER NOT NULL DEFAULT 0向表中添加一列。您还可以根据需要命名版本控制列,只需传递一个字符串即可version: "myVersionColumn"

如果让sequelize处理数据库结构的创建,它会为FDMData表生成一个DDL,如下所示

CREATE TABLE IF NOT EXISTS FDMData (
    vesselId INTEGER NOT NULL , 
    startTime DATETIME, 
    version INTEGER NOT NULL DEFAULT 0, 
    PRIMARY KEY (vesselId)
)
Run Code Online (Sandbox Code Playgroud)

并且您的代码工作得很好。例如

Vessel.sync().then(model=> {
// or sequelize.sync()
    console.log(model)
}).catch(error=> {
    console.log(error)
})
Run Code Online (Sandbox Code Playgroud)