Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails GORM如何确保相关对象属性的唯一性_Grails_Gorm_Unique_One To Many - Fatal编程技术网

Grails GORM如何确保相关对象属性的唯一性

Grails GORM如何确保相关对象属性的唯一性,grails,gorm,unique,one-to-many,Grails,Gorm,Unique,One To Many,我正试图了解GORM和关系映射。两人的关系很好,但有一个问题。我似乎无法确保添加到邮件列表的每个邮件地址都有一个唯一的地址。要做到这一点,最有效的方法是什么 注意:对MailAddress.address没有唯一的约束。同一个表中可以存在相同的地址 class MailAddress { String name String email static belongsTo = MailingList static constraints = {

我正试图了解GORM和关系映射。两人的关系很好,但有一个问题。我似乎无法确保添加到
邮件列表
的每个
邮件地址都有一个唯一的地址。要做到这一点,最有效的方法是什么

注意:
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
    }
}

您可以添加一个唯一的约束:

static constraints = {
    name blank:true
    email email:true, blank:false, unique: true
}

=>对电子邮件变量设置唯一约束(unique:true)。这将阻止在表中保存相同的电子邮件地址。

如@ibaraf的评论中所述,答案是自定义验证程序。
MailingList
类需要验证所有地址(
maildAddress
)是否具有唯一的电子邮件地址

我将这个约束添加到
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()
    })
}

更多信息可在此处找到

这就是问题所在。当前表允许复制我目前无法更改的内容。我只想在邮件列表中的地址之间实现唯一性如果我理解正确,您希望在hasMany关联之间实现唯一性。如果是这样的话,你可以看看这个答案,谢谢你提到这个帖子!!我几天前读过,但它让我头疼,因为提供的示例不起作用。所以我回到了医生那里,找到了答案。谢谢你的帮助。