繁体   English   中英

使用LazyList时,Grails一对多关系无法创建回到父级的链接

[英]Grails one-to-many relationship failing to create link back to parent when using a LazyList

我需要一次性保留一对多关系的父级和子级-有问题的域对象是ProjectProductLineItem (一个Project有许多ProductLineItem )。

我创建了一个页面,用户可以在其中添加一个或多个行到“产品”表中,并且我希望在用户提交表单时将每一行作为新的ProductLineItem (由Project拥有) ProductLineItem

第一次保存域对象的效果很好,但是当我尝试通过更新页面更新同一组对象时,执行此操作时控制器中出现IndexOutOfBoundsException

projectInstance.properties = params

我可以通过productLineItemsProject声明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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM