Сохраняется ли только первое save () в экземпляре объекта домена?
Среда: Grails 3.3.5, GORM 6.1.9 Я считаю, PostgreSQL 9.5, JDK 1.8.0_171, Ubuntu 16.04.
Мое приложение создает экземпляры Recital (объект домена) на основе входных данных из ряда текстовых файлов. Это загрузка базы данных, поэтому все происходит за один вызов контроллера, вызывая метод службы. Одна транзакция.
Сервисный метод анализирует входные потоки в поисках сечений. Когда он находит его, он пытается findBy метод (сноски нумеруются). Если есть сольный концерт с указанным номером, он обновляет его из входных данных и сохраняет (). В противном случае он создает новый экземпляр из входных данных и сохраняет (). failOnError везде для хорошей меры. Сольные концерты не принадлежат ничего, никаких каскадных проблем.
Логика программы не может определить, является ли модификация последним обновлением экземпляра. Таким образом, есть save () после каждого изменения. Но это не работает. Кажется, вы можете сохранить () только один раз.
Чистый результат, найденный в базе данных, заключается в том, что сохраняется только первое сохранение (). При отладке работающей программы я могу убедиться, что экземпляры полностью обновлены в памяти.
Если это правильно, в документации должно быть сказано: Метод save сообщает контексту постоянства, что экземпляр должен быть сохранен или обновлен в его текущем состоянии. Любые и все модификации после этой точки (в той же транзакции) будут игнорироваться. Объект не будет сохранен сразу, если не используется аргумент flush ...
P.S. Документация save () объясняет "flush: true", так как сбрасывает контекст персистентности . Это имеет мало объяснительной ценности для новичка. Вот некоторые синонимы «очистка»: очистка, удаление, удаление, очистка, очистка, удаление. Пользователь базы данных может получить его как ROLLBACK, а не как COMMIT. Объяснение, конечно, терминология гибернации. Хорошо, если документация Grails в основном автономна. (Боковой вопрос в той же части документации.)