最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

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

网站源码admin19浏览0评论

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

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

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

//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
    } 
  });

我尝试设置

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
   }
);

我得到

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
  }
});

再一次,我得到

Unhandled rejection SequelizeDatabaseError: Invalid column name 'version'.

我错过了什么?我该如何解决这个问题?

谢谢

回答如下:

当您设置

version: true
并且您正在手动创建数据库结构时,sequelize expect to find a column 在表上命名为
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)
)

你的代码工作得很好。例如

Vessel.sync().then(model=> {
// or sequelize.sync()
    console.log(model)
}).catch(error=> {
    console.log(error)
})
发布评论

评论列表(0)

  1. 暂无评论