Grails BootStrap: нет подписи метода: применимо *.addTo*

У меня есть два класса домена: User

class User {

    String username
    String password
    String email
    Date dateCreated
    Date lastUpdated

//  static belongsTo = [profile: Profile]

    static constraints = {
        username size: 3..20, unique: true, nullable: false, validator: { _username ->
            _username.toLowerCase() == _username
        }
        password size: 6..100, nullable: false, validator: { _password, user ->
            _password != user.username
        }
        email email: true, blank: false
//      profile nullable: true
    }
}

и профиль:

class Profile {

    String firstName
    String middleName
    String lastName
    byte[] photo
    Date dateCreated
    Date lastUpdated

    static belongsTo = [User]

    static constraints = {
        firstName blank: false
        middleName nullable: true
        lastName blank: false
        photo nullable: true, maxSize: 2 * 1024**2
    }
}

Профиль может принадлежать только одному пользователю, а пользователь может иметь (или принадлежать?) только одному профилю. Когда я пытаюсь создать объекты в BootStrap.groovy в текущей настройке, я получаю сообщение об ошибке, говорящее о том, что метод addTo() не существует. Я действительно не знаю, что я делаю неправильно. Вот как я создаю их в BootStrap.groovy:

User arun = new User(username: 'arun', password: 'password', email: '[email protected]').save(failOnError: true)
Profile arunProfile = new Profile(firstName: 'Arun', lastName: 'Allamsetty').addToUser(arun).save(failOnError: true)

Может кто-нибудь указать на ошибку(и). Я уверен, что это глупо.


person aa8y    schedule 14.10.2014    source источник


Ответы (1)


Требуются строгие двунаправленные отношения один-один, как вы просили:

Профиль может принадлежать только одному пользователю, а пользователь может иметь (или принадлежать?) только одному профилю

В классах предметной области в основном требуются три модификации:

//User.groovy
static hasOne = [profile: Profile]

static constraints = { 
    profile unique: true
}

//Profile.groovy
User user

Выше приведены двунаправленные отношения один-один. Вам больше не нужны addTo* при создании каждого из них.

Profile arunProfile = new Profile(firstName: 'Arun', lastName: 'Allamsetty')

User arun = new User(username: 'arun', password: 'password', 
                     email: '[email protected]', 
                     profile: arunProfile).save()
person dmahapatro    schedule 14.10.2014