Подтвердить что ты не робот

Преимущества object.get() vs object.read() в Grails

Я снимал часть документации Grails и нашел этот бит о методе read() в Grails. Если я правильно понимаю это, вы можете вытащить версию "только для чтения" из базы данных, которая будет сохранена только при явном вызове save(). Мне кажется, что вы должны использовать вызов read() всякий раз, когда у вас есть объект, который вы не ожидаете изменить.

Но почему бы вам просто не использовать вызов read()? Поскольку объект будет изменен на разрешения на чтение и запись, если вы все равно save(), не было бы безопаснее просто читать в объекте, а не получать его?

4b9b3361

Ответ 1

Вероятно, вы правы - в большинстве случаев это было бы эквивалентно. Но Hibernate не требует, чтобы вы вызывали save(), поскольку он выполняет грязную проверку во время флеша, и поскольку Grails использует перехватчик "Open Session in View", в конце каждого запроса всегда будет флеш. Это удивляет людей, которые вносят изменения в экземпляр, полученный с помощью get(), который должен был быть временным только при рендеринге представления, но затем изменения все равно сохраняются без вызова save(). read() будет иметь больше смысла в этом сценарии.

Одна оптимизация производительности заключается в использовании http://grails.org/doc/latest/ref/Database%20Mapping/dynamicUpdate.html только для ввода измененных полей в базу данных. Значение по умолчанию заключается в том, чтобы вытолкнуть все поля независимо от того, были ли они изменены или нет, с тех пор нет необходимости генерировать новый SQL для каждого обновления. Если вы read(), экземпляр Hibernate не сохраняет исходные данные, поэтому динамическое обновление было бы невозможным, так как не было способа узнать, какие поля загрязнены.