Hibernate kann eine Schnittstelle abbilden - siehe Beispiel . Ich bezweifle, dass Grails dies beim Mapping nach Konvention unterstützt - aber Sie können versuchen, das Mapping Anmerkungen aus obigem Beispiel oder XML-Konfiguration.
bearbeiten :eine Kommentarfrage beantworten:
Auf Datenbankebene müssen Sie einen Taggable
haben Tabelle für Tag.References
mit einem Fremdschlüssel zu referenzieren.
-
Discriminator besiegt Polymorphismus NICHT, wenn er automatisch hinzugefügt wird - zum Beispiel fügt Hibernate/Gorm bei der Tabelle-pro-Hierarchie-Zuordnung eine
class
hinzu um eine konkrete Klasse beim Lesen von Objekten aus db herauszufinden. -
Wenn Sie Ihr
Taggable
abbilden s in zwei Tabellen -Taggable
Teil zuTaggable
und alles andere auf eine bestimmte Tabelle, 1:1 referenziert - die gesamte Diskriminatorarbeit sollte von Hibernate für Sie erledigt werden.
Übrigens class
-Feld ist ziemlich lang - es enthält den vollständig qualifizierten Klassennamen .
Bearbeiten 2 :So oder so, es wird ziemlich komplex, und ich persönlich würde dem Ansatz folgen, den ich in einer anderen Frage vorgeschlagen habe :
- alle Klassen mit Taggable-Schnittstelle dynamisch nach
hasMany=[tags:Tag]
abfragen Eigentum; - oder weniger bevorzugt - einen handgefertigten Kindertisch und einen Diskriminator zu haben.