如何在Grails中为生成的id设置约束条件
问题描述:
我有一个用户表,并希望使用username(这是一个电子邮件地址)作为id字段,所以我使用生成的:'assigned'映射来做到这一点。 。添加约束用户名字段才能作为有效的电子邮件地址,但不是强制这里是我的用户等级:如何在Grails中为生成的id设置约束条件
class User {
transient springSecurityService
String username
String password
String firstName
String lastName
static hasMany = [accounts: Account]
static hasOne = [company:Company]
static belongsTo = Company
static constraints = {
username blank: false, unique: true, email: true
password blank: false
accounts nullable:true
}
static mapping = {
password column: '`password`'
id generator:'assigned', name:'username', property:'username'
}
基本上,我尝试使用用户的电子邮件作为id字段使用它作为与其他对象关系的外键(如用户与Account的一对多关系),但是当我尝试在dbconsole中手动添加用户名时,它允许我添加任何字符串。
如何执行电子邮件约束?
答
您需要记住,在使用GORM尝试插入数据库之前使用约束和验证框架。如果直接使用dbconsole,则直接插入到数据库中,而您正在跳过验证框架。
如果您需要验证数据库中的电子邮件,也许您可以在表中定义一个BEFORE INSERT TRIGGER。但它将是数据库特定的。
答
当您尝试save()
对象的约束才会被检查,所以没有理由相信任何不妥,如果你只是执行:
someUser.username = 'notAnEmailAddress'
要检查约束是否工作正常添加以下行
if (someUser.save()) {
println 'error: constraints not working'
} else {
println 'success: save failed because of errors $user.errors'
}