grails - 无法保持一对多关系

标签 grails gorm

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

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

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/

相关文章:

java - Icecast 音频客户端的问题

hibernate - Grails刷新:在Domain.withTransaction {}闭包内部为true

grails - 连接Grails GORM搜索条件中的字段

grails - Grails中的唯一约束

sql - 用HQL查询多对多联接表

grails - 使用元类覆盖Domain中的gorm方法

grails - Grails:如何在服务内部提供服务?

grails - Grails:createCriteria错误结果

Grails:通过与字符串的一对多关联查找

grails - 如何使用链接的命名查询并添加其他条件闭包来获取PagedResultList?