2011-07-28 25 views
1

我有一個Grails域類我在Redis的堅持,這樣的事情:Redis的(Grails的插件)不會保留枚舉對象

class A { 
    String one 
    Integer two 

    B three 

    E four 

    mapWith = "redis" 
} 

class B { 
    String name 
} 

enum E { 
    VALUE1, VALUE2 
} 

當我堅持A級與GORM一個實例.save()方法,除了枚舉字段「four」,Redis保存正確。

正如你所看到的事實是已知的,在這裏報道:http://jira.grails.org/browse/GPREDIS-3

有沒有好的解決辦法,以節省枚舉或類似的東西? 我們在考慮一個String對象的數組,你怎麼看?

回答

3

我已經得到了這個主要實現,但它不適用於Gemfire,我正在等待,直到它解決所有支持的nosql提供程序之前推動修復程序。作爲解決方法,您可以使用inList約束與持久性String屬性和非持久性獲取/設置對的組合與您當前屬性的名稱(例如,

class A { 
    String one 
    Integer two 

    B three 

    String fourString 

    void setFour(E e) { 
     fourString = e?.name() 
    } 
    E getFour() { 
     fourString ? E.valueOf(fourString) : null 
    } 

    static constraints = { 
     fourString inList: E.values()*.name() 
    } 

    static transients = ['fourString'] 

    static mapWith = "redis" 
} 
+0

我喜歡你所建議的解決方案,謝謝:)伯特 – lucke84

+0

爲了使這項工作,我已刪除了「瞬態」映射,否則吸氣無法通過在 - 檢索領域fact-not-persisted相應的字符串。 我做錯了嗎?你爲什麼要表明把字符串作爲一個瞬態字段? – lucke84

+1

對不起,應該是'四',因爲那只是一個get/set對。 –