Grails видит мой недавно созданный объект как нулевой в BootStrap.groovy - PullRequest
0 голосов
/ 22 февраля 2012

У меня есть 2 класса и Enum.Один класс является оберткой для Enum, которая содержит как enum, так и его строковое представление, а другой - класс User.Перечисление определяет тип пользователя.Они настроены следующим образом:

Class User {

    String username
    String password

    String firstName
    String lastName
    String emailAddress
    UserStatus status
    UserType type
    Date dateCreated

    List<UserRole> roles

    static mapping = {
        roles(fetch: 'join')
    }
}

Мой Enum выглядит следующим образом:

enum RoleType {
    SUPER_USER('superuser','Super User'),
    SUPPORT_USER('supportuser','Support User'),
    STANDARD('standard','Standard')

    String id
    String name

    RoleType(String id, String name) {
        this.id = id
        this.name = name
    }

    String toString() {
        name
    }
}

, а мой класс-обёртка выглядит следующим образом:

class UserRole {

    static belongsTo = [user:User]

    static auditable = true

    RoleType roleType
    String role

    static constraints = {
        role(nullable:false, blank:false)
        roleType(nullable:false, inList:RoleType.values().toList())
    }

    static mapping = {
        sort(role: "asc")
        role(role: IdentityEnumType,sqlType: "varchar(40)")
    }
}

Все довольно стандартновещи.Теперь я хочу загрузить пользователя в БД:

    User user = new User(
            username:'support@quirk.biz',
            password:'ilovequirk',
            status:UserStatus.ACTIVE,
            type:UserType.QUIRK,
            firstName:'Quirk',
            lastName:'Support',
            emailAddress:'support@quirk.biz'
        )

        UserRole userRole = new UserRole(roleType:RoleType.SUPER_USER, role:RoleType.SUPER_USER.toString())
        user.addToRoles(userRole)

        user.save(failOnError:true)

Когда он попадает в строку addToRoles, он разрывается и выдает мне сообщение об ошибке:

No signature of method: za.co.hollard.User.addToRoles() is applicable for argument types: (za.co.hollard.UserRole) values: [za.co.hollard.UserRole : null]

Но если я добавлю некоторыеprintlns перед методом addToRoles - я могу проверить только что созданный объект UserRole и получить точно те значения, для которых он был создан ??

1 Ответ

1 голос
/ 22 февраля 2012

Я считаю, что вы не можете использовать 'addTo *', если вы определили ассоциацию как отображение один-ко-многим через 'hasMany'.В классе 'Пользователь' замените

 List<UserRole> roles

на

 static hasMany = [ roles:UserRole]
...