2014-09-02 2 views
1

Можете ли вы заставить функциональность DomainClass.get (id) в Grails вытащить новый экземпляр из базы данных, а не используя локальную копию, полученную ранее в сеансе?Grails - Получение свежего экземпляра из базы данных

Я хотел бы сравнить, если свойство экземпляра изменилось:

Пример:

def myInstance = MyClass.get(params.id) 
    myInstance.properties = params.data // updates the instance, but does not save it 

    // stuff happens 

    def myDbInstance = MyClass.get(params.id) // would like this to pull a fresh copy from the database, unchanged to allow for comparison 
    if(myDbInstance.value != myInstance.value) { 
     // do something if has changed 
    } 

Спасибо.

+3

Посмотрите на '' getPersistentValue() '] (http://grails.org/doc/latest/ref/Domain%20Classes/getPersistentValue.html) и [' isDirty() '] (http: // grails .org/док/последний/исй/Домен% 20Classes/isDirty.html). – dmahapatro

ответ

0

Использование метода refresh() для принудительного перезапуска экземпляра из базы данных.

0

В случае, если мы хотим сравнить поля, обновленные в соответствии с теми, которые уже доступны в базе данных, refresh() обновит экземпляр, который еще не сохранен в базе данных. В этом случае getPersistentValue('field_name') экземпляра будет извлекать значение в базе данных и может использоваться для сравнения.

Если employeeAllocationInstance уже доступен в действии обновления контроллера для, например, и мы хотим сравнить обновленные поля позволяет говорить jan распределение затем

existing_allocation = EmployeeAllocation.get(employeeAllocationInstance.id)

бы обновили значения в employeeAllocationInstance поэтому мы может сделать

existing_allocation?.getPersistentValue('jan')?.value, чтобы получить значение, которое хранится в базе данных (которое еще не обновлено)

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