Я наткнулся на эту Набедренную ветку , которая может быть похожа на то, что вы ищете.Это интересное решение, и кажется довольно хакерским, но, вероятно, будет работать нормально.
Вот пример кода из потока (любезно предоставлен Martin Dow - если он перебирает это и публикует этов качестве ответа я уберу его из своего ответа и дам ему голос.)
class SomeDomainClass {
Long associationId
String associationClass
def getAssociation() {
// Handle proxied class names
def i = associationClass.indexOf('_$$_javassist')
if (i > -1) associationClass = associationClass[0..i-1]
getClass().classLoader.loadClass(associationClass).get(associationId)
}
def setAssociation(association) {
associationId = association.id
associationClass = association.class.name
}
}
Вот несколько вариантов, которые включают типы, которые могут указывать вам направление.
Перечисления
class Person {
static hasMany = [fondnessess: Something]
}
enum Something {
ONE_SOMETHING,
ANOTHER_SOMETHING;
}
Наследование
(я не самый большой поклонник наследования, но иногда это нормальное решение.)
class Person {
static hasMany = [somethings: Something]
}
class Something {
// could be abstract, but look out for
// http://jira.grails.org/browse/GRAILS-6780
}
class OneSomething extends Something { ... }
class AnotherSomething extends Something { ... }
Это зависит от того, сколько логики необходимо определить каждой Something
реализации.Оба эти примера можно заставить работать, и, возможно, есть и другие решения.