Добавление бизнес-логики в класс домена с использованием имени метода в стиле геттера - PullRequest
4 голосов
/ 27 мая 2010

Я пытаюсь добавить метод в класс домена Grails, например,

class Item {

  String name

  String getReversedName() {
    name.reverse()
  }

}

Когда я пытаюсь загрузить приложение с помощью консоли Grails, я получаю следующую ошибку:

Вызвано: org.springframework.beans.factory.BeanCreationException: Ошибка создания бина с именем 'sessionFactory': сбой вызова метода init; вложенным исключением является org.hibernate.PropertyNotFoundException: не удалось найти установщик для свойства reversedName в классе Item ... еще 18

Похоже, что Hibernate интерпретирует getReversedName () как получатель для свойства, однако в этом случае это производное поле и, следовательно, не должно сохраняться. Очевидно, что в моем реальном коде бизнес-логика, которую я раскрываю, более сложна, но она не имеет отношения к этому вопросу. Я хочу иметь возможность вызывать item.reversedName в моем коде / gsps.

Как я могу предоставить свойству (получателю) доступ к методу в доменном классе Grails без попыток Grails сопоставить его с Hibernate?

1 Ответ

11 голосов
/ 27 мая 2010

Я полагаю, у вас есть два варианта:

1) Используйте def

def getReversedName() {
  name.reverse()
}

2) Добавьте объявление переходных процессов в начало вашего доменного объекта:

 static transients = [ 'reversedName' ] 

[править] (я бы пошел с # 1) (я бы пошел с # 2); -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...