grails / gorm多列唯一约束违规

时间:2013-10-02 15:44:35

标签: grails gorm

我在下面添加了我的域名。我正在尝试在列上指定一个唯一约束,该列将使该列基于另一列的值而唯一,并且在父域中是唯一的。

public enum PostStatus {
    PUBLISHED,
    PENDING_REVIEW,
    DRAFT,
    TRASH
}

public enum PostType {
    INTRO,
    FUTURE,
    FAMILY
}


class Post {


    String content
    PostType postType
    PostStatus postStatus
    Date dateCreated
    Date lastUpdated
    static belongsTo = [basicProfile:BasicProfile]

    static constraints = {
        content(blank:true, nullable:true, maxSize:5000)
        postType(blank:false, nullable:false)
        postStatus(blank:false, nullable:false, unique:'postType') //status must be unique within each postType, and within the parent.
    }
    static mapping = {
        content sqlType:'text'
    }
}

class Profile {
    static hasMany = [
            post:Post
    ]
}

现在postStatus在postType中是唯一的,但它将唯一约束应用于Post表。因此,该表允许每个postType一个postStatus,然后发生唯一约束违规。我需要的是每个配置文件的每个postType一个唯一的postStatus。

发布表插入示例: 好记录#1: 个人资料ID:1 post_status:DRAFT post_type:INTRO

好记录#2: 个人资料ID:1 post_status:PUBLISHED post_type:INTRO

好记录#3: 个人资料ID:1 post_status:DRAFT post_type:未来

错误记录#4,违反记录1的唯一约束,即使它是针对不同的配置文件ID。 个人资料ID:2 post_status:DRAFT post_type:INTRO

帖子属于一个配置文件,那么如何定义约束以使每个配置文件具有唯一性?基本上我正试图获得一个复合唯一键:

profile.id + postType + postStatus

1 个答案:

答案 0 :(得分:4)

您是否尝试过http://grails.org/doc/latest/ref/Constraints/unique.html上描述的最后一个示例?

例如:postStatus(空白:false,可空:false,唯一:['postType','basicProfile'])