如何解决PostgreSQL Has-Many关系插入相同的ID错误
我有2个具有很多关系的结构,如下所示:
handleSubjectChange(evt){
this.setState({ ...this.state,subject: evt.target.value },() => {
我在这里关注gorm的文档:https://gorm.io/docs/associations.html#Association-Mode
据我了解,当我们插入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首先将数组电子邮件([] Email)插入数据库,尝试插入数据库时遇到了这样的问题:
Domain
这在我的控制台中输出:
var domain models.Domain
var emails []models.Email
for key,_ := range Output {
emails = append(emails,models.Email{Address: key})
}
domain = models.Domain{
Emails: emails,}
dataAccess.Domain.Insert(domain) // db.Create(&domain)
Gorm插入2个具有相同ID的电子邮件,因此postresql错误如上所示。
我该如何避免使用相同的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)
[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)
,已经是primaryKey
(自动增量)。
解决方法
您需要更改
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"`
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。