我在下面添加了我的域名。我正在尝试在列上指定一个唯一约束,该列将使该列基于另一列的值而唯一,并且在父域中是唯一的。
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
答案 0 :(得分:4)
您是否尝试过http://grails.org/doc/latest/ref/Constraints/unique.html上描述的最后一个示例?
例如:postStatus(空白:false,可空:false,唯一:['postType','basicProfile'])