我有一个域对象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)。
我做错了什么?
答案 0 :(得分:2)
创建域时就像您创建的那样
class Parent {
List children
static hasMany = [children : Child]
}
然后为了完成这项工作,grails将children_idx
列添加到Child
表。此列中的值很重要,因为grails使用它来制作列表(按顺序放置实例)。第一条记录的值设置为0
,下一个1
,依此类推。并且如果此序列被破坏,那么列表中的空格。
这可能是个问题。
为避免破坏序列,请确保在删除关联对象时从其所有者中删除关联对象。