このNabble スレッドに出くわしました。これは、あなたが求めているものに似ている可能性があります。これは興味深い解決策であり、ハックのように思えますが、おそらく問題なく機能します。
スレッドのコード サンプルを次に示します ( 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
それは、各実装で定義する必要があるロジックの量によって異なります。これらの例はどちらも機能させることができ、おそらく他の解決策もあるでしょう。