1

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

我只想能够读取对象,我不需要 gorm crud。只在不破坏它们所拥有的接口的情况下阅读它们。

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

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

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

这是测试仓库。

这是片段。

但我得到了 StackOverFlowException。

我还尝试将所有域标记为可序列化,但是当我将它们从 memcached 中取回时,我需要重新附加每个域,以避免像 org.hibernate.LazyInitializationException 这样的休眠错误:无法初始化代理 - 没有会话

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

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

4

2 回答 2

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")
   }
}

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

于 2012-09-21T21:21:27.320 回答
1

看看:检索域的 GORM 持久属性列表

于 2012-09-21T21:12:04.310 回答