Hibernate può mappare un'interfaccia - vedi esempio . Dubito che Grails lo supporti nella mappatura per convenzione, ma puoi provare a utilizzare la mappatura annotazioni dall'esempio sopra, o config. XML.
modifica :risposta a una domanda di commento:
A livello di database, devi avere un Taggable
tabella per Tag.References
fare riferimento con una chiave esterna.
-
Il discriminatore NON sconfiggerà il polimorfismo, se viene aggiunto automaticamente, ad esempio, nella mappatura tabella per gerarchia, Hibernate/Gorm aggiunge una
class
campo per scoprire una classe concreta durante la lettura dell'oggetto da db. -
Se mappi il tuo
Taggable
s in due tabelle -Taggable
parte aTaggable
e tutto il resto in una tabella specifica, referenziata 1:1 - tutto il lavoro di discriminazione dovrebbe essere svolto per te da Hibernate.
BTW class
il campo è piuttosto lungo:contiene il nome della classe completo .
modifica 2 :Ad ogni modo, sta diventando piuttosto complesso e personalmente seguirei l'approccio che ho suggerito in un'altra domanda :
- interroga dinamicamente tutte le classi con l'interfaccia Taggable per
hasMany=[tags:Tag]
proprietà; - o, meno preferibile, avere un tavolo bambino artigianale e un discriminatore.