Grails не сохраняет при использовании findAll, но делает при использовании collection

У меня есть этот код:

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? Я попытался явным образом вызвать сохранение (и проверить на наличие ошибок), но все равно не повезло.

1 ответ

Это две разные пары обуви.

В первом случае вы сортировали список hasMany объекты, которые связаны с patient через соединительный стол с list index поле. Поэтому, когда вы сортируете список, поле индекса объединяемой таблицы загрязняется и будет обновляться после tx-commit.

Во втором случае вы получите список экземпляров, но не list index Информация. Итак, что бы вы ни делали со списком - переупорядочивание, добавление или удаление его записей - не делает его экземплярами dirty, Ergo, они не спасены даже на save()

Другие вопросы по тегам