我想存储数据库中是否应该是String或Integer。我的幻想是这样的:
Class FantasyClass{
String someInfo
Class whichClass
}
然后我可以这样称呼它:
def thisThing = new FantasyClass(someInfo:'lalala',whichClass:String)
是否有解决方法来实现此功能?
我可以去的地方:
def getAThing = FantasyClass.get(1)
assert getAThing.whichClass == String
assert 'thisIsAString' instanceof getAThing.whichClass //THIS IS WHAT I REALLLLLLY WANT!!!
答案 0 :(得分:2)
您可以使用asType
方法
def getAThing = FantasyClass.get(1)
assert getAThing.whichClass == String
assert 'thisIsAString'.getClass() == getAThing.someInfo.asType(getAThing.whichClass)
这是一个更通用的例子:
def value = 123
def otherThing = new FantasyClass(
someInfo: value.toString(),
whichClass: value.getClass()).save()
assert otherThing.someInfo.asType(getAThing.whichClass) instanceof Integer
您可以向域类添加一个帮助器方法,将您将String转换为指定的类型:
def getTypedValue() {
someInfo?.asType(foo)
}
然后你可以这样做:
assert otherThing.typedValue == 123
答案 1 :(得分:1)
您可以在域类中拥有Class
字段,而无需任何其他代码。 GORM会自动将其存储为完全限定的类名。
对于没有自动转换的其他类,您需要能够转换为数据库类型和从数据库类型转换。要让grails自动转换您的类型,您需要一个休眠UserType。只需创建一个实现该接口的类,并将字段映射到域类中:
static mapping = {
whichClass type: MyUserType
}