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
classhinzu um eine konkrete Klasse beim Lesen von Objekten aus db herauszufinden. -
Wenn Sie Ihr
Taggableabbilden s in zwei Tabellen -TaggableTeil zuTaggableund 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.