因此,我尝试将以下嵌套数据结构插入数据库中,但是在创建过程中遇到了外键冲突。我相信问题是GORM尝试在容器表插入之前将数据插入对象表。一,我的评估正确吗?有两种方法可以指定表数据的插入顺序吗?
type Widgets struct {
ID uuid.UUID json:"id" gorm:"column:uuid;primary_key"
名称字符串json:"name"
说明字符串json:"description"
标签字符串json:"tags"
容器[] *容器json:"containers" gorm:"foreignkey:WidgetID"
}
type容器结构{
ID uuid.UUID json:"id" gorm:"column:uuid;primary_key"
名称字符串json:"name"
说明字符串json:"description"
标签字符串json:"tags"
WidgetID uuid.UUID json:"widgetId" gorm:"column:widget_uuid"
对象[] *对象json:"objects" gorm:"foreignkey:ContainerID"
}
type Object struct {
ID uuid.UUID json:"id" gorm:"column:uuid;primary_key"
名称字符串json:"name"
说明字符串json:"description"
标签字符串json:"tags"
ContainerID uuid.UUID json:"containerId" gorm:"column:container_uuid"
}
下面是db.Debug()。Create(widget).Error调用的Debug()输出
(/ devel / go / src / apisvr / types / widget.go:66) [2019-05-29 12:32:29] [0.70ms]插入“小部件”(“ uuid”,“名称”,“描述”,“标签”)值('46aee409-eadb-4cb5-90c8-657f0d1b51e3 ','testwidget3','我的第一个小部件','BigApp')返回“ cgs”。“ uuid” [1行受到影响或返回了]
(/ devel / go / src / apisvr / types / widget.go:66) [2019-05-29 12:32:29] [0.44ms]更新“容器” SET“名称” =“ testcon3”,“描述” =“我的第三个容器”,“标签” =“ Container3”,“ widget_uuid” ='46aee409-eadb-4cb5-90c8-657f0d1b51e3'其中“容器”。“ uuid” ='5e96f300-14c4-4c76-8678-0fb6bd972b13' [0条受影响或已返回的行]
(/ devel / go / src / apisvr / types / widget.go:66) [2019-05-29 12:32:29] [0.32ms]更新“对象” SET“名称” =“ testobj1”,“描述” =“我的第一个对象”,“标签” =“ object1”,“ container_uuid” ='5e96f300-14c4-4c76-8678-0fb6bd972b13'WHERE“ object”。“ uuid” ='59855805-1d3b-4b97-b5e4-0f8e562604f0' [0条受影响或已返回的行]
(/ devel / go / src / apisvr / types / widget.go:66) [2019-05-29 12:32:29] [0.47ms] SELECT * FROM“ object” WHERE“ object”。“ uuid” ='59855805-1d3b-4b97-b5e4-0f8e562604f0'按“ object”排序。 “ ASC LIMIT 1 [0条受影响或已返回的行]
(/ devel / go / src / apisvr / types / widget.go:66) [2019-05-29 12:32:29] pq:在表“对象”上插入或更新违反了外键约束“ object_container_uuid_fkey”
(/ devel / go / src / apisvr / types / widget.go:66) [2019-05-29 12:32:29] [1.30ms]插入到“对象”(“ uuid”,“名称”,“描述”,“标签”,“ container_uuid”)值('59855805-1d3b-4b97 -b5e4-0f8e562604f0','testobj1','我的第一个对象','object1')返回“对象”。“ uuid” [0条受影响或已返回的行]
(/ devel / go / src / apisvr / types / widget.go:66) [2019-05-29 12:32:29] pq:在表“对象”上插入或更新违反了外键约束“ object_container_uuid_fkey”
(/ devel / go / src / apisvr / types / widget.go:66) [2019-05-29 12:32:29] pq:在表“对象”上插入或更新违反了外键约束“ object_container_uuid_fkey”