gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 15:32:35 26 4
gpt4 key购买 nike

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

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

第一次保存域对象的效果很好,但是当我尝试更新同一对象集(通过更新页面)时,执行此操作时 Controller 中出现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。有任何想法吗?

最佳答案

事实证明,将集合声明为包似乎可以防止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)

我能够解决问题。

编辑:

对于它的值(value),我不想使用列表(在将列表用于一对多关系集合时,我似乎总是遇到出现“空白”的问题),所以我一直在摆弄我的代码。

如果我这样声明袋子:
Collection<ProductLineItem> productLineItems = ListUtils.lazyList(new ArrayList(), {new ProductLineItem()} as org.apache.commons.collections.Factory)

那么未在子实体内部设置对父代的引用。但是,如果我这样声明袋子:
Collection productLineItems

然后就可以了!并且集合也自动扩展!

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

关于hibernate - 使用LazyList时,Grails一对多关系无法创建回到父级的链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17419692/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com