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

时间:2013-07-02 07:19:35

标签: hibernate grails gorm one-to-many

我要求一次性坚持一对多关系的父母和子女 - 有问题的域对象是ProjectProductLineItemProject很多ProductLineItem s。。

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

第一次保存域对象效果很好,但是当我尝试更新同一组对象时(通过更新页面),我在控制器中得到一个IndexOutOfBoundsException

projectInstance.properties = params

我可以通过在此productLineItems中声明Project集合来解决此问题 -

Collection<ProductLineItem> productLineItems = ListUtils.lazyList(new ArrayList(), {new ProductLineItem()} as org.apache.commons.collections.Factory)

但是由于某种原因,这会阻止在我进行初始保存时填充ProductLineItem.project属性。

我正在使用Grails 2.2.2。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

事实证明,将集合声明为包可能会阻止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

然后它的作品!该系列也自动扩展!

仍在测试我的代码,但到目前为止看起来还不错。