Grails:在数据库中存储一个类文字

时间:2012-03-06 19:42:09

标签: class grails gorm

我想存储数据库中是否应该是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!!!

2 个答案:

答案 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
}