Grails 3:由于唯一约束违规导致更新域失败

时间:2016-02-28 04:22:05

标签: grails

我有以下抽象域类。它是根据SpringSecurity UserDetailsS​​ervice 的规范实现的:

abstract class Users {
    transient passwordEncoder
    String username
    String password
    boolean enabled = true

    static constraints = {
        username blank: false, unique: true
        password blank: false
    }

    static mapping = {
        tablePerHierarchy false
        id generator: 'assigned', name: 'username'
        version false
    }

    def beforeInsert() {
        encodePassword()
    }

    def beforeUpdate() {
        if (isDirty('password')) {
            encodePassword()
        }
    }

    protected void encodePassword() {
        password = passwordEncoder ?
                passwordEncoder.encode(password) : password
    }
}

这是我用来实现它的域类:

@Resource(uri="/userinfo")
class UserInfo extends Users {
    String name
    String title
    enum Status {
        ACTIVE,
        INACTIVE,
        UNCONFIRMED
    }

    Status status = Status.UNCONFIRMED
    static belongsTo = [organization: Organization]
    static constraints = {
        name blank: false
        organization nullable: false
    }
}

问题是我可以创建UserInfo类的实例,但我无法更新它们。运行以下代码:

UserInfo userInfo = UserInfo.findByUsername "fakeemail@gmail.com"
userInfo.status = UserInfo.Status.ACTIVE
if(!userInfo.save()) {
    logger.error "Unable to save user updates"
    userInfo.errors.allErrors.each {
        println it
    }
}

导致错误:

  

字段'username'上的对象'com.UserInfo'中的字段错误:被拒绝的值[fakeemail@gmail.com];代码[com.UserInfo.username.unique.error.com.UserInfo.username,com.UserInfo.username.unique.error.username,com.UserInfo.username.unique.error.java.lang.String,com.UserInfo。 username.unique.error,userInfo.username.unique.error.com.UserInfo.username,userInfo.username.unique.error.username,userInfo.username.unique.error.java.lang.String,userInfo.username.unique。错误,com.UserInfo.username.unique.com.UserInfo.username,com.UserInfo.username.unique.username,com.UserInfo.username.unique.java.lang.String,com.UserInfo.username.unique,用户信息。 username.unique.com.UserInfo.username,userInfo.username.unique.username,userInfo.username.unique.java.lang.String,userInfo.username.unique,unique.com.UserInfo.username,unique.username,独特。 java.lang.String中,独特]; arguments [username,class com.UserInfo,fakeemail @ gmail.com];默认消息[类[{1}]的属性[{0}]值[{2}]必须是唯一的]

我做错了什么?

1 个答案:

答案 0 :(得分:0)

  

我做错了什么?

据我所知,没有。这看起来像验证支持中的错误。