我有以下抽象域类。它是根据SpringSecurity UserDetailsService 的规范实现的:
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}]必须是唯一的]
我做错了什么?
答案 0 :(得分:0)
我做错了什么?
据我所知,没有。这看起来像验证支持中的错误。