Это не проблема в 2.0, но в более ранних версиях.Когда вы добавляете открытое поле в класс Groovy (например, String firstName
в доменном классе), компилятор Groovy преобразует его в закрытое поле и в общедоступный метод получения и установки.В классах домена Grails свойства являются постоянными по умолчанию, но свойства определяются как согласованная пара геттер / сеттер.Открытые поля создают это для вас, но вы можете сделать это трудным способом, как в Java:
class Person {
private String name
String getName() { return this.name }
void setName(String name) { this.name = name }
}
Так что, когда вы добавляете геттер (или сеттер), он выглядит как половина свойства геттера / сеттерапары, и поскольку сеттер отсутствует, это проблема для GORM.
К счастью, это просто;добавьте имя свойства вашего геттера в список transients
:
static transients = ['nameAttribute']