Ich verwende Grails und ich habe ein Domain-Modell mit mehreren hasMany-Attributen für dieselbe Domain-Klasse, das folgendermaßen aussieht:
%Vor%Das Problem, auf das ich stoße, ist, dass wenn ich etwas zur Liste der Posts hinzufüge, es auch irgendwie in die Likes und Dislikes-Listen gelangt. Zumindest sieht es so aus, wenn ich durch jede dieser Listen iteriere.
Ich denke, dass das Problem ist, dass ich auch die folgende Beziehung in meiner Post-Domain habe:
%Vor%Was ist der beste Weg, diese Beziehungen zu konfigurieren, damit mein Modell funktioniert? Irgendwelche Vorschläge?
@Wayne,
Ich habe auch versucht, Ihren Test zu verwenden, und er hat erfolgreich bestanden. Das einzige, was mir einfällt, ist, dass etwas mit meiner Speichermethode in meinem PostController nicht stimmt. Ich habe den folgenden Beziehungscode eingefügt (ich verwende das Spring Security Core-Plugin und meine Contributor-Klasse erweitert die Benutzerklasse, die mit diesem Plugin erstellt wurde):
%Vor%Gibt es etwas, das hier herausragt?
Das Problem ist, dass Sie eine Eins zu viele zwischen Post und Contributor (Post hat einen Autor, Autor hat viele Beiträge) sowie zwei viele zu viele Beziehungen zwischen Post und Contributor (Post hat viele Likers, Likers wie viele Beiträge ) (Post hat viele Abneigungen, Abneigungen mögen viele Beiträge nicht). Das belongsTo
in Post erklärt zwar das Verhalten, aber durch das Entfernen wird das Problem nicht gelöst, sondern nur ein anderes erstellt. Das Endergebnis ist, dass die GORM-Konventionen zu kurz kommen und man GORM sagen muss, wie man sich anders verhält oder Dinge modelliert.
Es gibt mehrere Möglichkeiten, aber die eine, die in den Sinn kommt, ist, Vote separat von Post zu modellieren und es so zu machen, dass ein Contributor hasMany
likeVotes und hasMany
dislikeVotes
GORM modelliert dies als eine Stimme-Tabelle mit einer Diskriminator-Spalte, um Likes und Dislikes zu trennen; Auf diese Weise können Sie Konflikte zwischen Vorlieben, Abneigungen und verfassten Beiträgen beseitigen.
Dann in Contributor
%Vor%Die Beziehungen sind jetzt geklärt:
GORM kann diese Beziehungen verstehen und sich angemessen verhalten.
Wenn Sie diese Option nicht mögen, besteht der nächste Schritt darin, benutzerdefinierte Zuordnungen für Ihre Datenbankstruktur anzugeben und dann mappedBy
zu verwenden, um die verschiedenen Beziehungen zu unterscheiden. Dies ist der Ansatz, wenn Sie einen Contributor direkt auf drei verschiedene Arten mit Post verknüpfen möchten.
Der Standardweg für Multi-M: M ist jedoch joinTable , wie in GRAILS-4884 empfohlen.
Wechseln Sie in eine Viele-zu-Viele-Beziehung, und definieren Sie eine Zuordnungsdomänenklasse. In dieser Zuordnungsdomänenklasse können Sie dann den Typ der Beziehung angeben. mögen, nicht mögen oder Autor.
%Vor%Sie können hier Ссылка nachsehen, um weitere Informationen zu einem Vielen zu erhalten -viele Zuordnungsdomänenklasse.