0

我有这个代码:

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

        results.eachWithIndex { item, index ->
            item.index = index
        }
    }
}

这在没有 save() 的情况下保存到数据库。我将结果更改为使用 findAll 查询(因为我只想选择它们),现在它不会将更改保存到数据库中。我确实看到了索引的变化,但这些变化永远不会持续存在。

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

这是 GORM 的陷阱之一吗?我试图显式调用保存(并检查是否有任何错误),但仍然没有运气。

4

1 回答 1

3

那是两双不同的鞋子。

在第一种情况下,您正在对对象列表进行排序,这些对象列表通过带有字段的连接表hasMany链接到。因此,当您对列表进行排序时,连接表的索引字段会变脏,并将在 tx-commit 时更新。patientlist index

在第二种情况下,您会获得实例列表但没有list index信息。所以,无论你对列表做什么——重新排序、添加或删除它的条目——都不会使它成为实例dirty。因此,即使在save()

于 2015-09-18T22:00:58.483 回答