【问题标题】:Sequelize Duplicate Key Constraint ViolationSequelize 重复键约束违规
【发布时间】:2016-12-01 15:05:37
【问题描述】:

我正在尝试通过使用 Sequelize 和 Postgresql 显式创建的联结表添加多对多关系。

关系两边的表是这样关联的:

Shop.belongsToMany(models.user, {through: 'visits' })
User.belongsToMany(models.shop, {through: 'visits' })

访问联结表主键定义如下:

id: {
 type: DataTypes.INTEGER,
 primaryKey: true,
 autoIncrement: true // Automatically gets converted to SERIAL for postgres
}

当我尝试插入访问时,我收到以下错误:

ERROR:  duplicate key value violates unique constraint "visits_shopId_userId_key"
DETAIL:  Key ("shopId", "userId")=(1, 12) already exists.

在执行 pg_dump 后,我尝试通过在模型中添加 constraint: false 来移除复合键约束,但仍然出现错误。

(我在调试过程中删除了表并重新同步了几次)

【问题讨论】:

    标签: postgresql sequelize.js


    【解决方案1】:

    在对Sequelize issues 进行了深入研究之后,事实证明,移除 N:M 复合键上的约束很容易解决。

    through 键可以获取具有unique: false 属性的对象:

    Shop.belongsToMany(models.user, {
        through: {
            model: 'visits',
            unique: false
        },
        constraints: false
    });
    

    【讨论】:

      猜你喜欢
      • 2011-04-19
      • 1970-01-01
      • 2019-05-03
      • 2011-05-25
      • 2020-07-22
      • 2020-03-28
      • 2018-06-28
      • 2013-10-21
      相关资源
      最近更新 更多