为了账号安全,请及时绑定邮箱和手机立即绑定

Postgresql Has-Many 关系插入相同的 id 错误

Postgresql Has-Many 关系插入相同的 id 错误

Go
江户川乱折腾 2022-06-27 16:33:07
我有 2 个结构有很多这样的关系:type Domain struct {    ID     uint    `gorm:"primaryKey;type:serial"`    Emails []Email `gorm:"foreignKey:ID" "column:emails"`}type Email struct {    ID      uint   `gorm:"primaryKey;type:serial"`    Address string `gorm:"column:address"`}我在这里关注 gorm 文档:https ://gorm.io/docs/associations.html#Association-Mode据我了解,当我们插入一条Domain记录时,gorm首先将数组电子邮件([]Email)插入数据库,我在尝试插入数据库时遇到了这样的问题:var domain models.Domainvar emails []models.Emailfor key, _ := range Output {  emails = append(emails, models.Email{Address: key})}domain = models.Domain{  Emails: emails,}dataAccess.Domain.Insert(domain) // db.Create(&domain)这是我的控制台中的输出:2020/09/10 10:37:46 /Users/tho/go/src/txxxx/exxxx/dataAccess/domains.go:18 ERROR: ON CONFLICT DO UPDATE command cannot affect row a second time (SQLSTATE 21000)[362.162ms] [rows:0] INSERT INTO "emails" ("address","id") VALUES ('info@example.com',2),('d.apple@example.com',2) ON CONFLICT ("id") DO UPDATE SET "id"="excluded"."id" RETURNING "id"2020/09/10 10:37:46 /Users/tho/go/src/txxxx/exxxx/dataAccess/domains.go:18 ERROR: ON CONFLICT DO UPDATE command cannot affect row a second time (SQLSTATE 21000)[1078.499ms] [rows:1] INSERT INTO "domains" DEFAULT VALUES RETURNING "id"ERRO[0050] Err: ERROR: ON CONFLICT DO UPDATE command cannot affect row a second time (SQLSTATE 21000) Gorm 插入 2 封具有相同 id 的电子邮件,因此 postresql 错误如上所示。我怎样才能避免相同的 id,因为它primaryKey已经serial存在(自动增量)。
查看完整描述

1 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

你需要改变


Emails []Email `gorm:"foreignKey:ID" "column:emails"`


Emails []Email `gorm:"foreignKey:DomainId" "column:domain_id"`

并添加


DomainId uint   `gorm:"column:domain_id"`

在type Email struct


尝试:


type Domain struct {

    ID     uint    `gorm:"primaryKey;type:serial"`

    Domain string  `gorm:"column:domain"`

    Emails []Email `gorm:"foreignKey:DomainId" "column:domain_id"`

}


type Email struct {

    ID       uint   `gorm:"primaryKey;type:serial"`

    Address  string `gorm:"column:address"`

    DomainId uint   `gorm:"column:domain_id"`

}


查看完整回答
反对 回复 2022-06-27
  • 1 回答
  • 0 关注
  • 185 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号