2012-03-06 19 views
0

我想存储某些内容是否应该是数据库中的字符串或整数。我的幻想会是这样的:Grails:将类文字存储在数据库中

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

可以使用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 

而且您可以将辅助方法添加到将为字符串转换为指定类型的域类中:

def getTypedValue() { 
    someInfo?.asType(foo) 
} 

,然后你可以这样做:

assert otherThing.typedValue == 123 
1

你可以有一个域类Class场没有任何额外的代码。 GORM会自动将其存储为完全限定的类名称。

对于没有自动转换的其他类,您需要能够转换为数据库类型和从数据库类型转换。要使Grails自动转换您的类型,您需要休眠UserType。只需创建一个实现该接口的类,在你的领域类字段并将其映射:

static mapping = { 
    whichClass type: MyUserType 
} 
+0

你不需要任何的这一点 - 格姆将尽一切为你。 – 2012-03-06 22:39:40

+0

我不知道类是自动处理的。感谢您的更正。 – ataylor 2012-03-06 23:15:40