设置为全局选项,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)
})
更多推荐
在 node 中将乐观锁定设置为全局选项,sequelize
发布评论