Невозможно запросить закрытый атрибут Grails 2.0 CreateCriteria
-
28-10-2019 - |
Вопрос
Я пытаюсь обновить свое приложение, чтобы граститься 2.0, и я сталкиваюсь с последующей проблемой.У меня есть личный атрибут домена с публичным добычником.Я хотел бы запросить этот атрибут в Createcriteria, и он возвращает меня: «Не удалось разрешить свойство ...» Исключение, даже если Getter является публичным.Я видел ошибку Jira
Мой код похож на: Класс домена
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