У меня есть три класса домена: Beer, Review и Reviewer.
Я хочу, чтобы таблица Review создала отношения между многими Beer и Reviewer, поэтому я хочу, чтобы первичный ключ Review былсмесь полей идентификаторов от Beer и Reviewer.Я следую этой документации Grails.
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).Я хотел бы указать порядок столбцов в индексе.