hay*_*uhl 5 indexing grails grails-orm composite-primary-key
我有三个域类:Beer,Review和Reviewer.
我希望Review表在Beer和Reviewer之间创建多对多关系,因此我希望Review的主键是Beer和Reviewer的id字段的组合.我正在关注这个Grails文档.
这是我的域类.
class Beer {
String name
String type
Brewery breweryId
static hasMany = [ reviews : Review ]
static constraints = {
}
}
class Reviewer {
String screenName
static hasMany = [ reviews : Review ]
static constraints = {
}
}
class Review implements Serializable {
int score
Beer beer
Reviewer reviewer
static constraints = {
}
static mapping = {
id composite:['beer', 'reviewer']
}
}
Run Code Online (Sandbox Code Playgroud)
我得到了编译错误,但是stackoverflow上的另一个答案说我需要添加implements Serializable.这样可以解决错误,但是当我查看数据库时,我仍然没有得到复合主键.
以下是我在查看表定义时所看到的内容.我正在使用Postgres.
Table "public.review"
Column | Type | Modifiers
-------------+---------+-----------
id | bigint | not null
version | bigint | not null
beer_id | bigint | not null
reviewer_id | bigint | not null
score | integer | not null
Indexes:
"review_pkey" PRIMARY KEY, btree (id)
Foreign-key constraints:
"fkc84ef75823f39326" FOREIGN KEY (beer_id) REFERENCES beer(id)
"fkc84ef7587c483106" FOREIGN KEY (reviewer_id) REFERENCES reviewer(id)
Run Code Online (Sandbox Code Playgroud)
我只对具有唯一约束的复合索引感到满意,但我也无法弄清楚如何做到这一点.我已经能够创建一个非唯一的复合索引,但这有两个问题.一,它不是唯一的.二,列在索引中按字母顺序指定(beer_id,reviewer_id).我想指定索引中列的顺序.
试试这个,在您的域中查看域类:
static constraints = {
review(unique: ['beer','reviewer'])
}
Run Code Online (Sandbox Code Playgroud)
您可能需要删除该表并让 Gorm 重新创建它。
上述限制意味着评论必须包含啤酒/评论者组合的唯一记录。它仍然是多对多的,评论者有多种啤酒,反之亦然,但评论是独一无二的。
| 归档时间: |
|
| 查看次数: |
13865 次 |
| 最近记录: |