我有一个用户表,并希望使用用户名(这是一个电子邮件地址)作为id字段,所以我使用生成的:'assigned'映射来执行此操作。我还添加了用户名字段的约束被验证为电子邮件地址但是没有强制执行。这是我的用户类:
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中手动添加用户名,它允许我添加任何字符串。
如何强制执行电子邮件约束?
答案 0 :(得分:0)
只有在您尝试save()
对象时才会检查约束,因此如果您只是执行,则没有理由相信有任何不妥之处:
someUser.username = 'notAnEmailAddress'
要检查约束是否有效,请添加以下行
if (someUser.save()) {
println 'error: constraints not working'
} else {
println 'success: save failed because of errors $user.errors'
}
答案 1 :(得分:0)
您需要记住,之前使用约束和验证框架尝试使用GORM插入数据库。如果您直接使用dbconsole,则直接插入数据库,并且您正在跳过验证框架。
如果您需要验证数据库中的电子邮件,您可以在表格中定义BEFORE INSERT TRIGGER。但它将是特定于数据库的。