2011-07-28 22 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对。 –