2012-09-21 27 views
1

我试图将grails域类序列化为Maps或类似的,以便能够将其存储在memcached中。如何序列化域类grails

我想只能读取对象,我不需要gorm crud。只读取它们而不会破坏它们的接口类型。

例如:我可以转换域地图,becouse它不会打破接入接口像.<property>.findall或类似

首先,我试图做一个手动序列化,但它是非常容易出错。所以我需要更一般的东西。

然后我尝试使用grails编解码器作为地图序列化。

Here is the testing repo.

Here is the snippet.

,但我得到StackOverFlowException。

我也试图以纪念所有域为Serializable,但我需要的时候我把他们带回从memcached的避免像org.hibernate.LazyInitializationException休眠错误重新连接各个领域:无法初始化代理 - 没有会话

你知道一个方法来实现这个吗?

谷歌搜索类似这样的“在memcached中存储域类”并找出并不是一个常见的问题是非常令人沮丧的。

回答

4

我还没有看到这样一个不折不扣的现成的解决方案,但如果你想保留它通用,你可以手动(和一致)喜欢做这个:

def yourDomainInst = DefaultGrailsDomainClass(YourDomainClazz) 
List listOfOnlyPersistantProperties = yourDomainInst.persistantProperties 

def yourNewMap 

yourObjects.each { obj -> 
    listOfOnlyPersistantProperties.each { prop -> 
     def propName = prop.name 
     yourNewMap.put(propName, obj."$propName") 
    } 
} 

类似的东西应该工作。请注意,可能有一百个错误,因为我现在无法尝试,但这是一般想法。