我有三个领域类:Beer、Review 和 Reviewer。
我希望 Review 表在 Beer 和 Reviewer 之间创建多对多关系,因此我希望 Review 的主键是 Beer 和 Reviewer 的 id 字段的组合。我正在关注这个 Grails 文档。
http://grails.org/doc/latest/guide/5.%20Object%20Relational%20Mapping%20(GORM).html#5.5.2.5%20Composite%20Primary%20Keys http://grails.org/doc/latest/guide/5.%20Object%20Relational%20Mapping%20(GORM).html#5.5.2.5%20Composite%20Primary%20Keys
这是我的域类。
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)。我想指定索引中列的顺序。