Como criar uma chave primária composta usando GORM?
Tenho três classes de domínio: Cerveja, Revisão e Reviso
Eu quero que a tabela Review crie um relacionamento muitos para muitos entre Beer e Reviewer, por isso quero que a chave primária da Review seja composta pelos campos de identificação de Beer e Reviewer. Estou seguindo esta documentação do Grails.
qui estão minhas classes de domíni
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']
}
}
Eu estava recebendo erros de compilação, mas outra resposta aqui no stackoverflow disse que eu precisava adicionarimplements Serializable
. Isso resolveu o erro, mas quando olho no banco de dados, ainda não estou recebendo uma chave primária compost
Aqui está o que estou vendo quando olho para a definição da tabela. Estou usando o 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)
Eu ficaria feliz com apenas um índice composto com uma restrição única, mas também não consigo descobrir como fazer isso. Consegui criar um índice composto não exclusivo, mas isso tem dois problemas. Um, não é único. Segundo, as colunas são especificadas em ordem alfabética no índice (beer_id, reviewer_id). Gostaria de especificar a ordem das colunas no índice.