Wie erstelle ich einen zusammengesetzten Primärschlüssel mit GORM?
Ich habe drei domain-Klassen: Bier, Prüfung und Prüfer.
Möchte ich den Review-Tabelle zu erstellen, die eine viele zu viele Beziehung zwischen Bier und Rezensent, so will ich den primär-Schlüssel Abgeben, um eine Zusammensetzung die id-Felder aus Bier und Prüfer. Ich bin nach dieser Grails-Dokumentation.
Hier sind meine Domänen-Klassen.
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']
}
}
War ich immer Kompilierungsfehler, aber eine andere Antwort hier auf stackoverflow gesagt, ich brauchte, um hinzuzufügen implements Serializable
. , Kümmerte sich um den Fehler, aber wenn ich mir in der Datenbank, ich bin noch immer nicht in einem zusammengesetzten Primärschlüssel.
Hier ist, was ich sehe, wenn ich schaue auf die definition der Tabelle. Ich bin mit 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)
Ich würde glücklich sein, mit nur einem zusammengesetzten index mit einer unique-Einschränkung, aber ich kann nicht herausfinden, wie zu tun, dass entweder. Ich habe in der Lage, eine nicht-eindeutigen zusammengesetzten index, aber das hat zwei Probleme. Man, es ist nicht einzigartig. Zwei, die Spalten angegeben werden, die in alphabetischer Reihenfolge in den index (beer_id, reviewer_id). Ich möchte geben Sie die Reihenfolge der Spalten im index.
InformationsquelleAutor haydenmuhl | 2011-03-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Implementierte ich eine ähnliche situation, mit teilweise unterschiedlichen Bedingungen:
hasMany
Beziehung.Wenn die Umsetzung, wie diese, die mysql-Datenbank ist ok. (beer_id,reviewer_id) ist der Primärschlüssel.
Ich weiß nicht, was genau bewirkt dein problem ist, aber hoffe, das gibt Ihnen einen Hinweis darüber, wo das problem sein kann.
InformationsquelleAutor Hoàng Long
Nahm ich die Grails-Mandat, dass ich nicht die Verwendung Zusammengesetzter Primärschlüssel als kluge Ratschläge und bin zu vermeiden. Wenn dem so ist, glaube ich, eine praktikable alternative, um Ihr problem zu lösen ist der Verbund eine Unique-Einschränkung.
ref: http://grails.org/doc/1.1.x/ref/Constraints/unique.html
Jacco ' s Antwort scheint Sie nicht richtig, obwohl es sieht optisch sehr nah zu korrigieren, hier ist, wie würden Sie schreiben einen zusammengesetzten unique-Einschränkung für dieses problem:
in der Erwägung, dass, wenn die Programmierer wollten-link-3-db-Felder als einzigartige, die richtige formation:
die sieht wie Jacco Antwort, aber der name der Klasse nicht verwendet werden, da die erste Zeichenkette mit der Einschränkung, das erste Feld name verwendet wird.
Habe ich nur diese verwendet, die Struktur des Codes in mein eigenes Projekt app, und es scheint richtig verhält, sehen Sie auch, wie unit-Tests unique-Einschränkungen:
http://www.ibm.com/developerworks/java/library/j-grails10209/index.html
(siehe listing 11)
InformationsquelleAutor Rob
Versuchen diese, In Ihren domain-Bewertung domain-Klasse:
möglicherweise müssen Sie die Tabelle löschen und lassen Gorm neu erstellen.
den oben genannten Einschränkung bedeutet, dass eine Prüfung bestehen muss, die von einem einzigartigen Rekord-Bier/Prüfer-Kombination. es ist immer noch viele zu viele, wo ein Rezensent hat mehrere Biere und visa-versa, aber die Bewertungen sind eindeutig.
InformationsquelleAutor z.eljayyo