为什么Grails有很多错误?

时间:2015-03-23 15:14:14

标签: grails gorm

我有一个域对象Parent,它具有作为List实现的hasMany关系。我收到的List大小不正确,我不知道为什么:

class Parent {
    List children

    static hasMany = [children : Child, otherHasMany : SomeOtherChildClass]

    static mapping = {
        children lazy: false
    }
}

def parent = Parent.get(someId) // parent is returned as a result of a query
def numChildren = parent.children.size()

我在子列表中的正确子项中间散布了很多空值。

parent.children.each {
    println it
}

给出:

Child 1
NULL
Child2
NULL
Child3
Child4
...  // seemingly random order of NULLs interspersed between correct values, but there never appear to be 2 NULLs in a row

在我的情况下,size()调用返回71个孩子,但是只有51个孩子应该在家长中。

当我执行SQL查询时,我得到正确数量的子项:

SELECT count(*)  from CHILDREN where parent_id = someId
51

当我打开SQL日志记录并检查Hibernate正在执行的查询时,我得到了相同的正确答案(51)。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

创建域时就像您创建的那样

class Parent {
    List children
    static hasMany = [children : Child]
}

然后为了完成这项工作,grails将children_idx列添加到Child表。此列中的值很重要,因为grails使用它来制作列表(按顺序放置实例)。第一条记录的值设置为0,下一个1,依此类推。并且如果此序列被破坏,那么列表中的空格

这可能是个问题。

为避免破坏序列,请确保在删除关联对象时从其所有者中删除关联对象。

参考Collections in GORM