2011-07-28 9 views
1

は、私が持っているGrailsのドメインクラスは保持されません。このようなものを(プラグインはGrailsの):Redisのは、私はRedisのに固執する必要が列挙型オブジェクト

class A { 
    String one 
    Integer two 

    B three 

    E four 

    mapWith = "redis" 
} 

class B { 
    String name 
} 

enum E { 
    VALUE1, VALUE2 
} 

私はGORMと、クラスAのインスタンスを永続化.save()メソッドを使用すると、Redisはenumフィールド "4"を除いて正しく保存します。

あなたが見ることができるように事実が知られており、ここに報告されていますhttp://jira.grails.org/browse/GPREDIS-3

は、列挙型または類似のものを保存するには良い回避策はありますか? Stringオブジェクトの配列について考えていますが、どう思いますか?

答えて

3

これは主に実装されていますが、Gemfireでは機能しません。サポートされているすべてのnosqlプロバイダが修正されるまで待っています。この問題を回避するには、永続的なStringプロパティと非永続的な取得/設定の組み合わせを組み合わせて、現在のプロパティの名前を持つinList制約を使用できます。

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

に感謝し、あなたが示唆しているソリューションを好むが、私は、「トランジェント」のマッピングを削除したそうゲッターはインしてフィールドを取得することができませんでした事実に依存しない対応する文字列。 私は間違ってやっていますか?文字列を一時的なフィールドとして配置するように指定したのはなぜですか? – lucke84

+1

申し訳ありません、それはちょうどget/setペアなので、 'four'にする必要があります。 –

関連する問題