我正试图了解GORM和关系映射。关系正常,但有一个问题。我似乎无法确保添加到MailAddress
的每个MailingList
都有唯一的地址。什么是必须有效的方法来做到这一点?
注意: MailAddress.address
没有唯一约束。相同的地址可以存在于同一个表中。
class MailAddress {
String name
String email
static belongsTo = MailingList
static constraints = {
name blank:true
email email:true, blank:false
}
}
class MailingList {
String name
static hasMany = [addresses:MailAddress]
static mapping = {
addresses cascade: 'all-delete-orphan'
}
static constraints = {
name blank:false
}
}
答案 0 :(得分:1)
如@ibaralf的评论所述,答案是自定义验证器。
MailingList
类需要验证所有地址(MailAddress
)是否具有唯一的电子邮件地址。
我将此约束添加到MailingList
类并且它有效。
static constraints = {
name blank:false
addresses(validator: {
if (!it) {
// validates to TRUE if the collection is empty
// prevents NULL exception
return true
}
// Grab a collection with all e-mailaddresses in the list
def addressCollection = it*.email
// Compare to a collection with only unique addresses
return addressCollection == addressCollection.unique()
})
}
可在此处找到更多信息http://grails.org/doc/2.2.0/ref/Constraints/validator.html
答案 1 :(得分:0)
您可以添加一个唯一约束:
static constraints = {
name blank:true
email email:true, blank:false, unique: true
}
=>将唯一约束放在电子邮件变量上(唯一:true )。这样可以防止相同的电子邮件地址保存在表格中。