Когда мне следует вызывать save () для экземпляра объекта домена в Grails? - PullRequest
8 голосов
/ 29 февраля 2012

Из того, что я прочитал, save() сообщает контексту постоянства, что экземпляр должен быть сохранен или обновлен.Однако в службе есть методы, которые изменяют свойство экземпляра домена без вызова save(), и изменение мгновенно появляется в моей базе данных, без проблем.

Является ли метод save() более безопасным способом?зная, что экземпляр домена будет обновлен после внесения изменений (и обнаружив ошибки с отображением failOnError)?Должен ли он использоваться КАЖДЫЙ раз, когда я изменяю свойства экземпляра домена, или это переусердствует?

1 Ответ

8 голосов
/ 29 февраля 2012

Если вы создаете новый экземпляр класса домена, то вызов .save() сообщит нижележащему уровню Hibernate о сохранении нового объекта в базе данных.Без .save() оно не будет сохранено в базе данных.

Если вы извлекаете объект через .get(myId), то любые изменения будут автоматически сохраняться в базе данных в конце основной транзакции, посколькуHibernate видит объект как «грязный».Конец транзакции находится в конце вызова метода для транзакционной службы или в конце запроса для контроллеров.Вы можете позвонить .save(), если хотите в этих случаях, но это не обязательно.Он обеспечивает легкий доступ к сбросу Hibernate с помощью .save(flush:true) или failOnError для проверки.

...