如何序列化域类grails

时间:2012-09-21 18:53:39

标签: grails memcached grails-domain-class

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

我希望能够只读取对象,我不需要gorm crud。只有阅读它们而不破坏它们的接口类型。

例如:我可以将域名转换为地图,因为它不会破坏.<property>.findall或类似的访问界面

首先,我尝试进行手动序列化,但它非常容易出错。所以我需要更通用的东西。

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

Here is the testing repo.

Here is the snippet.

但是我得到了StackOverFlowException。

我还试图将所有域标记为Serializable,但是当我从memcached返回时我需要重新附加每个域以避免像org.hibernate.LazyInitializationException这样的hibernate错误:无法初始化代理 - 没有会话

你知道实现这个目标的方法吗?

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

2 个答案:

答案 0 :(得分: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")
   }
}

这样的事情应该有用。请注意,可能有一百个错误,因为我现在无法尝试,但这是一般的想法。

答案 1 :(得分:1)