2015-02-05 7 views
0

Я работаю в Граалей 2.3.8Обновление Grails домена don'tpersist

Мы следующие классы домена:

abstract class GroupItem { 
    static belongsTo = [group:AppGroup] 
    static mapping = { 
    tablePerHierarchy = false 
    } 
} 

class MyDomain extends GroupItem { 
    String name 
    String type 
    int Identifier 

    static hasMany = [attributes:Attribute] 

    static mapping = { 
    attributes cascade: 'all-delete-orphan' 
    } 
} 

class Attribute { 
    String name 
    String value 
    static belongsTo = [myDomain:MyDomain] 
} 

В методе «обновление» моего контроллера я пытаюсь обновить Объект «MyDomain». Я могу обновлять атрибуты, которые связывают с доменом fine, однако, когда я пытаюсь изменить любые свойства самого экземпляра (имя, идентификатор или тип), изменения не сохраняются. Код контроллера:

def update(Long id) { 
    --- 
    def myDomain = MyDomain.get(id) 
    myDomain.type = 'DIFFERENT TYPE' 
    myDomain.save(flush:true, failOnError:true) 
} 

Однако сигнал в базе данных по-прежнему имеет тот же тип, что и при его создании. Чтобы попытаться следовать логике, я добавил метод beforeUpdate для класса домена, который выводит этот тип, и я вижу, что он вызван, и в beforeUpdate он считает, что этот тип является моим новым значением, однако обновление никогда не сохраняется. Исключений нет, проверяются объекты и ничего в журналах. Есть ли какая-нибудь подсказка, что может быть причиной этого?

Cheers!

+0

Некоторые ошибки? если нет, попробуйте beforeInsert() вместо beforeUpdate() – Koloritnij

+0

Нет ошибок. Просто попробовал проверить, и кажется, что объект не грязный. – DJOodle

ответ

0

Право ... Пощечины Face

Биты, которые я не включил в этот пост, что они обновление на самом деле происходит в рамках службы (с аннотацией @Transactional и Im также с помощью команды объект, чтобы сделать некоторые проверки ранее в контроллере. объект Command проверяет идентификатор группы является действительным, видя, если оно непустое возвращается

def group = AppGroup.read(id). 

Я не знаю почему, но мне кажется, что с этим объектом находится в сеансе, это тот, который сохраняется в конце транзакции, и это не грязный. Если я отброшу эту группу, когда я закончу ее, тогда все будет хорошо.

Не знаете, почему это так, но эй хо, исправил мою проблему. Можете проверить, существует ли() лучше подходит ...

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