¿Cómo creo una clave primaria compuesta usando GORM?
Tengo tres clases de dominio: Beer, Review y Reviewer.
Quiero que la tabla Review cree una relación de muchos a muchos entre Beer y Reviewer, por lo que quiero que la clave principal de Review sea un compuesto de los campos de identificación de Beer y Reviewer. Estoy siguiendo esta documentación de Grails.
Aquí están mis clases de dominio.
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']
}
}
Recibía errores de compilación, pero otra respuesta aquí en stackoverflow decía que necesitaba agregarimplements Serializable
. Eso solucionó el error, pero cuando miro en la base de datos, todavía no obtengo una clave primaria compuesta.
Esto es lo que veo cuando veo la definición de la tabla. Estoy usando 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)
Estaría contento con solo un índice compuesto con una restricción única, pero tampoco puedo entender cómo hacerlo. He podido hacer un índice compuesto no único, pero esto tiene dos problemas. Uno, no es único. Dos, las columnas se especifican en orden alfabético en el índice (beer_id, reviewer_id). Me gustaría especificar el orden de las columnas en el índice.