Закрытый атрибут Grails 2.0 CreateCriteria не может быть запрошен - PullRequest
1 голос
/ 16 января 2012

Я пытаюсь обновить приложение до Grails 2.0, и у меня возникает следующая проблема. У меня есть атрибут частного домена с публичным геттером. Я хотел бы запросить этот атрибут в createCriteria, и он возвращает мне исключение «Не удалось разрешить свойство ...», даже если получатель является открытым. Я видел жука Джира http://jira.grails.org/browse/GRAILS-8498?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel но это все еще не работает. Грааль 1.3.7 работал нормально.

Мой код похож на: Доменный класс

class MyClass {
   protected boolean reserved = false

   protected void setReserved(boolean reserved) {
        this.reserved = reserved
    }

   public boolean getReserved() {
        return this.reserved
    }
}

Запрос

def c = MyClass.createCriteria()
def results = c.list {
   eq('reserved', true)
}

Возможно, проблема в том, что «зарезервированное» имя атрибута стало зарезервированным ключевым словом в grails, потому что кажется, что для других атрибутов с другими именами это работает ...

Ответы [ 2 ]

1 голос
/ 16 января 2012

Проблема здесь заключается в том, что для того, чтобы свойства класса домена автоматически сохранялись без необходимости их настройки, поля должны быть свойствами, т. Е. Они должны иметь открытую пару геттер / сеттер того же типа.

Groovy делает это за вас, когда вы добавляете открытое поле - оно делает поле приватным и создает общедоступные методы получения и установки. Но если у вас уже есть метод получения или установки, он этого не делает, и если они оба не являются общедоступными, они не считаются свойством (в смысле JavaBean), поэтому поле не является постоянным. Таким образом, это больше, чем то, что поле не запрашивается - оно даже не сохраняется и не обновляется в базе данных.

0 голосов
/ 16 января 2012

После нескольких минут исследования я понял, что проблема в защищенном сеттере.Если я установил сеттер на общедоступный, он работает.Кажется, это ошибка Grails, и поэтому я поднял ошибку Grails, см .: http://jira.grails.org/browse/GRAILS-8637

...