9

Morphia に Scala クラスを格納する必要があります。注釈を使用すると、 _ <: Enumerationのコレクションを保存しようとしない限り、うまく機能します

Morphia は、そのタイプのシリアライザーがないことを訴えています。今のところ、コレクションのタイプをSeq[String]に変更し、コレクション内のすべてのアイテムに対してtoStringを呼び出すことで埋めます。

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

4

1 に答える 1

1

この問題は、MongoDB の上部にある利用可能ないくつかの抽象化レイヤーに共通しています。それはすべて基本的な理由に戻ります: json/bson には同等の列挙型はありません。たとえば、Salatにも同じ問題があります。

実際、 MongoDB Java ドライバーは、ここで進行中の議論で読むことができるように、列挙型をサポートしていません: https://jira.mongodb.org/browse/JAVA-268問題がまだ未解決であることがわかります。Java で MongoDB を使用するフレームワークのほとんどは、このような低レベルの機能を実装していません。この選択は非常に理にかなっていると思います。なぜなら、低レベル ドライバーによって処理されないデータ構造をどのように処理するかを強制するのではなく、その処理方法を選択できるからです。

一般的に、サポートがないのは技術的な制限によるものではなく、設計上の選択によるものだと思います。列挙型の場合、それらを長所と短所にマッピングする方法は複数ありますが、他のデータ型の場合はおそらくより簡単です。MongoDB Java ドライバーの詳細はわかりませんが、複数の「モード」をサポートするにはリファクタリングが必要だったのではないでしょうか (それが新しいバージョンのシリアライゼーションについて話しているのかもしれません)。

これらは私が考えている2つの戦略です。

  • 列挙型にインデックスを付けてスペースの占有を最小限に抑えたい場合は、列挙型を整数にマップします (序数を使用しないで、Java で列挙型の開始値を設定してください)。
  • 懸念事項が mongoshell でのクエリ可能性である場合、データはデータ サイエンティストによってアクセスされるため、文字列値を使用して列挙型を保存することをお勧めします。

結論として、ネイティブ オブジェクトと MongoDB の間に中間データ構造を追加しても問題はありません。Salat は CustomTransformers を介してサポートしています。Morphia では、明示的に変換を行う必要があるかもしれません。頑張れ。

于 2013-08-04T08:28:03.303 に答える