2012-10-08 4 views
9

MorphiaにScalaクラスを格納する必要があります。私は_ <の店のコレクションにしようとしない限り、注釈で、それはうまく機能:列挙Scala、Morphia and Enumeration

Morphiaは1を提供するために、どのように、それはそのタイプのシリアライザを持っていない、と私は疑問に思っていることを訴えます。今度は、コレクションのタイプをSeq [String]に変更し、コレクション内のすべてのアイテムに対してtoStringを呼び出してコレクションのタイプを変更しました。

これはうまくいきますが、正しいかどうかはわかりません。

+1

「_ <:Enumeration'」のコレクションの正確な意味は? 'Seq [_ <:Enumeration]'( 'Seq'が変更可能でない限り、' Seq [Enumeration] 'と同じですか)、それとも別の意味ですか? –

+1

これは、** Aの列挙型の列挙です** – jdevelop

+0

'A.type'の代わりに' A.Value'を使ってみましたか?あるいは、私は 'Seq'の目的を誤解していますか? –

答えて

1

この問題は、MongoDBの上にあるいくつかの利用可能な抽象レイヤーに共通しています。すべてが根本的な理由に戻る:json/bsonには列挙型の同等物はない。例えば、Salatにも同じ問題があります。実際に

あなたがここで起こっ議論で読むことができるよう、MongoDBのJavaドライバは、列挙型をサポートしていません:あなたは問題がまだ開いて見ることができますhttps://jira.mongodb.org/browse/JAVA-268を。私がJavaでMongoDBを使用するのを見てきたフレームワークのほとんどは、このような低レベルの機能を実装していません。私は、低レベルのドライバでは扱えないデータ構造に対処する方法の選択肢をあなたに任せているので、この選択は非常に意味があると思います。

一般的に私はサポートの欠如は技術的な制限ではなく、設計の選択から来ていると感じます。列挙型の場合は、それらを長所と短所にマップする複数の方法がありますが、他のデータ型ではおそらく簡単です。私はMongoDB Javaのドライバを詳細にはわかりませんが、複数の "モード"をサポートするには、いくつかのリファクタリングが必要だったと思います。

これは私の戦略です考える:

  • あなたが列挙型にインデックスを作成するとスペース占有を最小化する場合は、整数に列挙型をマッピングします(序を使用していない、can set enum start value in javaしてください)。
  • あなたのデータは、データ科学者によってアクセスされますので、あなたの懸念は、mongoshellにqueryabilityある場合は、むしろ結論

その文字列値を使用して列挙型を格納します、何も悪いことは、中間データを追加することではありませんあなたのネイティブオブジェクトとMongoDBの間の構造。 SalatはCustomTransformersを介してそれをサポートしていますが、Morphiaではおそらく変換を明示的に行う必要があります。頑張れ。