[英]Grails one-to-many relationship failing to create link back to parent when using a LazyList
我需要一次性保留一对多关系的父级和子级-有问题的域对象是Project
和ProductLineItem
(一个Project
有许多ProductLineItem
)。
我创建了一个页面,用户可以在其中添加一个或多个行到“产品”表中,并且我希望在用户提交表单时将每一行作为新的ProductLineItem
(由Project
拥有) ProductLineItem
。
第一次保存域对象的效果很好,但是当我尝试通过更新页面更新同一组对象时,执行此操作时控制器中出现IndexOutOfBoundsException
projectInstance.properties = params
我可以通过productLineItems
在Project
声明productLineItems
集合来解决此问题-
Collection<ProductLineItem> productLineItems = ListUtils.lazyList(new ArrayList(), {new ProductLineItem()} as org.apache.commons.collections.Factory)
但是由于某些原因,这会阻止在执行初始保存时填充ProductLineItem.project
属性。
我正在使用Grails 2.2.2。 有任何想法吗?
事实证明,将集合声明为包似乎可以防止Grails设置外键约束。
通过改变
Collection<ProductLineItem> productLineItems = ListUtils.lazyList(new ArrayList(), {new ProductLineItem()} as org.apache.commons.collections.Factory)
至
List<ProductLineItem> productLineItems = ListUtils.lazyList(new ArrayList(), {new ProductLineItem()} as org.apache.commons.collections.Factory)
我能够解决问题。
编辑:
对于它的价值,我不想使用列表(在将列表用于一对多关系集合时,我似乎总是遇到出现“空白”的问题),所以我一直在摆弄我的代码。
如果我这样声明袋子:
Collection<ProductLineItem> productLineItems = ListUtils.lazyList(new ArrayList(), {new ProductLineItem()} as org.apache.commons.collections.Factory)
则未在子实体内部设置对父代的引用。 但是,如果我这样声明袋子:
Collection productLineItems
然后就可以了! 并且集合也自动扩展!
仍在测试我的代码,但到目前为止看起来不错。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.