2012-09-21 26 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") 
    } 
} 

類似的東西應該工作。請注意,可能有一百個錯誤,因爲我現在無法嘗試,但這是一般想法。