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