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(),但有时会得到:行被另一个事务更新或删除(或者未保存的值映射不正确)。那么我如何保存这些更改?您希望保存哪些更改?那么我如何保存这些更改?您希望保存哪些更改?那么我如何保存这些更改?您希望保存哪些更改?那么我如何保存这些更改?您希望保存哪些更改?