gpt4 book ai didi

grails - 无法保持一对多关系

转载 作者:行者123 更新时间:2023-12-02 14:12:33 24 4
gpt4 key购买 nike

在我当前的项目中,我无法保持一对多关系。
关系的双方将被保存-只是它们之间的链接丢失了。

我的两个域之间的一对多关系如下所示:

class Parent {
String name
...

static hasMany = [childs: Child]

Parent() {}

Parent(SomeOtherClass obj) {
this.properties = obj.properties
}
}

class Child {
int code
String description
}

我正在 Parent中创建我的 ParentService实例:
public Boolean createParents(List parentIds) {
boolean savedSuccessfully = true
Parent.withTransaction {status ->
parentIds.each { parentIdString ->
if (parentIdString && parentIdString.isInteger()) {
int parentId = parentIdString.toInteger()

def parentInstance = new Parent(someOtherService.getExternalParentObj(parentId))

someOtherService.getExternalChilds(parentId).each { entry ->
parentInstance.addToChilds(Child.findOrSaveWhere(code: entry.key, description: entry.value))
}

if(!parentInstance.save()) {
status.setRollbackOnly()
savedSuccessfully = false
}
}
}
}

return savedSuccessfully
}
Parent实例和 Child实例均已成功创建并保存。只是 parent 与 child 之间的联系缺失了。每个 childs实例的 Parent属性是一个空列表。

我不知道这是怎么回事。
为什么这种关系不会持久?有任何想法吗?

更新

在创建所有 ParentService实例之后,我为 childs添加了集成测试,以测试 Parent列表的存在:
...
assert parentService.createParents(["123","234","356"]) == true
def parent = Parent.get(1)
assert parent.childs.size() > 0
...

没想到-测试通过了。

最佳答案

我找到了错误的根源。

我完全错过了一些entry.valuenull。不知道为什么我在调试期间没有看到它。

现在,如果Child.findOrSaveWhere()不是entry.value,我仅使用null

我希望整个parentInstance.save()完全通过或失败。仍然不明白为什么在不给出任何错误的情况下无法填充联接表。

关于grails - 无法保持一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15093091/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com