Невозможно запросить закрытый атрибут Grails 2.0 CreateCriteria

StackOverflow https://stackoverflow.com/questions/8880395

Вопрос

Я пытаюсь обновить свое приложение, чтобы граститься 2.0, и я сталкиваюсь с последующей проблемой.У меня есть личный атрибут домена с публичным добычником.Я хотел бы запросить этот атрибут в Createcriteria, и он возвращает меня: «Не удалось разрешить свойство ...» Исключение, даже если Getter является публичным.Я видел ошибку Jira http://jira.grails.org/browse/grails-8498 uspage=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel Но это все еще не работает.Grails 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, потому что кажется, что для других атрибутов разных имен он работает ...

Это было полезно?

Решение

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top