2010-09-22 3 views
0

Очень часто используется domainClass.properties = params для привязки всех входящих параметров запроса к объекту класса домена. Я не понимаю, почему это назначение автоматически обновляет объект домена. напримерgrails - странное поведение после привязки данных

def update = { 
    def book = Book.get(1) 
    book.properties = params 
    book.discard() 
} 

присвоение параметров обновляет объект домена. метод отбрасывания не влияет. Может кто-нибудь мне помочь?

+0

Когда вы говорите «автоматически обновляется», вы имеете в виду, что объект домена сохраняется? Просто пытаюсь выяснить, что происходит. –

+1

Думаю, нам нужен еще какой-то контекст. Каково соединение с данными и как оно установлено? Выполнение book.properties = params делает не что иное, как просто установление значений свойств объекта в том, что находится в параметрах. Он не сохраняет объект. – mfloryan

+0

Да, «автоматически обновляется» означает, что объект doamin сохраняется. данные connectin - это простой hsqldb. я реализовал очень простой пример для устранения проблемы. Представьте, что мы это действие контроллера: четкости книга = Book.get (1) book.properties = PARAMS [книга: книга] Futhermore класс книга домена имеет замыкание BeforeUpdate на каждое обновление записывать в журнал учета. def beforeUpdate = { log.error "книга обновления" } В книге имеется только одна прописка -> Название строки. Каждый раз, когда прокси изменяется через привязку данных, до вызова обновления. так что это означает книгу obj. сохранить? – hitty5

ответ

2

Метод discard() не сбрасывает экземпляр книги, только предотвращает его автоматическое сохранение Grails. Чтобы сбросить экземпляр книги, вам необходимо перезагрузить его, например. используя Book.get (1).

И book.properties = params будет просто пытаться присвоить элементы в карте params свойствам Book, где имя свойства совпадает с ключом ввода карты. Я считаю, что это стандартная функциональность Groovy, а не характерная для Grails.

+0

спасибо за ответ. моя проблема в том, что благодаря привязке данных obj get сохраняется, когда некоторые свойства домена obj. был изменен. см. мой комментарий раньше. – hitty5

0

Я не знаю, почему ответ Рубена был выбран как правильный. @ hitt5 поведение такое же, как ожидалось, но да, это другое, и вы найдете здесь причину: http://blog.springsource.org/2010/06/23/gorm-gotchas-part-1/ См. раздел «Теперь вы спасаете, когда я не хочу, чтобы вы ?!» в частности.

Смежные вопросы