J'ai trois classes de domaine: Beer, Review et Reviewer. Je souhaite que la table Review crée une relation many-to-many entre Beer et Reviewer, donc je souhaite que la clé primaire de Review soit un composite des champs id de Beer et Reviewer. Je suis la documentation de Grails.Comment créer une clé primaire composite à l'aide de GORM?
Voici mes classes de domaine.
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']
}
}
Je recevais des erreurs de compilation, mais une autre réponse ici sur stackoverflow dit que je devais ajouter implements Serializable
. Cela a pris soin de l'erreur, mais quand je regarde dans la base de données, je ne reçois toujours pas une clé primaire composite.
Voici ce que je vois quand je regarde la définition de la table. J'utilise 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)
Je serais heureux avec juste un indice composite avec une contrainte unique, mais je ne peux pas comprendre comment faire, que ce soit. J'ai réussi à créer un index composite non unique, mais cela pose deux problèmes. Un, c'est non-unique. Deuxièmement, les colonnes sont spécifiées par ordre alphabétique dans l'index (beer_id, reviewer_id). Je voudrais spécifier l'ordre des colonnes dans l'index.