我有三个域类: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']
}
}
我遇到了编译错误,但是 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)
我很乐意只使用具有唯一约束的复合索引,但我也不知道如何做到这一点。我已经能够制作一个非唯一的复合索引,但这有两个问题。一,它是非唯一的。二、列在索引中按字母顺序指定(beer_id、reviewer_id)。我想指定索引中列的顺序。