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