Redis(grails插件)不会持久化枚举对象

Redis(grails插件)不会持久化枚举对象,grails,enums,redis,Grails,Enums,Redis,我有一个grails域类,我必须在Redis中持久化,类似这样: class A { String one Integer two B three E four mapWith = "redis" } class B { String name } enum E { VALUE1, VALUE2 } 当我使用GORM.save()方法持久化类A的实例时,Redis会正确地保存它,但枚举字段“four”除外 正如您所看到的,这一事实

我有一个grails域类,我必须在Redis中持久化,类似这样:

class A {
    String one
    Integer two

    B three

    E four

    mapWith = "redis"
}

class B {
    String name
}

enum E {
   VALUE1, VALUE2
}
当我使用GORM.save()方法持久化类A的实例时,Redis会正确地保存它,但枚举字段“four”除外

正如您所看到的,这一事实在这里被了解和报道:

是否有一个很好的解决方法来保存Enum或类似的东西?
我们正在考虑一个字符串对象数组,您认为如何?

我已经实现了这个方法,但它对Gemfire不起作用,我正在等待所有支持的nosql提供程序修复它,然后再进行修复。作为一种解决方法,您可以将
inList
约束与持久的
字符串
属性和具有当前属性名称的非持久的get/set对组合使用,例如

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

为了实现这一点,我删除了“transients”映射,否则getter无法通过事实上未持久化的对应字符串检索字段。我是不是做错了?为什么指示将字符串作为临时字段?对不起,应该是'four',因为这只是一个get/set对。