Session Grails没有';使用findAll时不保存,但在使用集合时保存

Session Grails没有';使用findAll时不保存,但在使用集合时保存,session,grails,collections,gorm,datapersistance,Session,Grails,Collections,Gorm,Datapersistance,我有以下代码: void updateIndex() { Visit.withNewSession { def results = patient.visits.sort{ it.date } results.eachWithIndex { item, index -> item.index = index } } } 这将在不保存()的情况下保存到数据库。我将结果更改为使用findAll查询(因为

我有以下代码:

void updateIndex() {
    Visit.withNewSession {
        def results = patient.visits.sort{ it.date }

        results.eachWithIndex { item, index ->
            item.index = index
        }
    }
}
这将在不保存()的情况下保存到数据库。我将结果更改为使用findAll查询(因为我只需要其中的一部分),现在它不会将更改保存到数据库中。我确实看到了索引的变化,但这些变化从未持续

def results = Visit.findAllByPatientAndTypeInList(
                this.patient,
                [Type.Test, Type.Junk]
            ).sort{ it.date }

这是GORM gotcha的吗?我试图显式地调用save(并检查是否有错误),但仍然没有运气。

这是两双不同的鞋

在第一种情况下,您正在对
列表进行排序,其中包含许多
对象,这些对象通过带有
列表索引
字段的联接表链接到
患者
。因此,在对列表排序时,联接表的索引字段变脏,并将在tx提交时更新


在第二种情况下,您会得到一个实例列表,但没有
列表索引
信息。因此,无论您对列表做什么—重新排序、添加或删除其条目—都不会使其实例变脏。因此,即使在
save()

这是两双不同的鞋子时,它们也不会被保存

在第一种情况下,您正在对
列表进行排序,其中包含许多
对象,这些对象通过带有
列表索引
字段的联接表链接到
患者
。因此,在对列表排序时,联接表的索引字段变脏,并将在tx提交时更新


在第二种情况下,您会得到一个实例列表,但没有
列表索引
信息。因此,无论您对列表做什么—重新排序、添加或删除其条目—都不会使其实例变脏。因此,即使在
save()

这是两双不同的鞋子时,它们也不会被保存

在第一种情况下,您正在对
列表进行排序,其中包含许多
对象,这些对象通过带有
列表索引
字段的联接表链接到
患者
。因此,在对列表排序时,联接表的索引字段变脏,并将在tx提交时更新


在第二种情况下,您会得到一个实例列表,但没有
列表索引
信息。因此,无论您对列表做什么—重新排序、添加或删除其条目—都不会使其实例变脏。因此,即使在
save()

这是两双不同的鞋子时,它们也不会被保存

在第一种情况下,您正在对
列表进行排序,其中包含许多
对象,这些对象通过带有
列表索引
字段的联接表链接到
患者
。因此,在对列表排序时,联接表的索引字段变脏,并将在tx提交时更新


在第二种情况下,您会得到一个实例列表,但没有
列表索引
信息。因此,无论您对列表做什么—重新排序、添加或删除其条目—都不会使其实例变脏。因此,即使在
save()

时,它们也不会被保存。您是否可以尝试使用save(flush:true,failOnError:true)并查看是否存在异常?sort()方法修改原始集合。在你的情况下,请耐心等待。该集合附加到Hibernate会话,因此它知道它发生了什么变化。动态查找器返回的集合不同。这是很重要的,它不关注你所做的改变。在第一个示例中,当您使用toSorted()而不是sort()时会发生什么情况?@LalitAgarwal我尝试了save(),但有时我得到:行被另一个事务更新或删除(或者未保存的值映射不正确)。您能否尝试save(flush:true,failOnError:true)并查看是否存在任何异常?sort()方法修改原始集合。在你的情况下,请耐心等待。该集合附加到Hibernate会话,因此它知道它发生了什么变化。动态查找器返回的集合不同。这是很重要的,它不关注你所做的改变。在第一个示例中,当您使用toSorted()而不是sort()时会发生什么情况?@LalitAgarwal我尝试了save(),但有时我得到:行被另一个事务更新或删除(或者未保存的值映射不正确)。您能否尝试save(flush:true,failOnError:true)并查看是否存在任何异常?sort()方法修改原始集合。在你的情况下,请耐心等待。该集合附加到Hibernate会话,因此它知道它发生了什么变化。动态查找器返回的集合不同。这是很重要的,它不关注你所做的改变。在第一个示例中,当您使用toSorted()而不是sort()时会发生什么情况?@LalitAgarwal我尝试了save(),但有时我得到:行被另一个事务更新或删除(或者未保存的值映射不正确)。您能否尝试save(flush:true,failOnError:true)并查看是否存在任何异常?sort()方法修改原始集合。在你的情况下,请耐心等待。该集合附加到Hibernate会话,因此它知道它发生了什么变化。动态查找器返回的集合不同。这是很重要的,它不关注你所做的改变。在第一个示例中,如果使用toSorted()而不是sort(),会发生什么情况?@LalitAgarwal我尝试了save(),但有时会得到:行被另一个事务更新或删除(或者未保存的值映射不正确)。那么我如何保存这些更改?您希望保存哪些更改?那么我如何保存这些更改?您希望保存哪些更改?那么我如何保存这些更改?您希望保存哪些更改?那么我如何保存这些更改?您希望保存哪些更改?