2

以下のコードでエラーが発生し、School クラスは DBObject インターフェイスを実装する必要があると表示されます。問題は、このインターフェースには大量のメソッドがあることです。私は 100 近くのクラスを持っていますが、何百万ものメソッドを書きたくありません。オブジェクトを保存する簡単な方法はありますか?

DBCollection table = db.getCollection("school");

School document = new School();
table.insert(document);
4

1 に答える 1

2

DBObjectのような既存の実装の 1 つを実装または拡張する代わりにBasicDBObject、データベースに保存できるすべてのオブジェクトに、オブジェクトの表現public DBObject toDBObject()を作成して返すメソッドを持たせることができます。DBObjectBasicDBObjectMap<String, Object>オブジェクト データをキーと値のペアとして処理する であるため、これに適しています。

より一般的な解決策として、リフレクションを使用して、任意の Java オブジェクトを DBObject に変換できるメソッドを作成できます。これをさらに制御するには、いくつかの注釈を作成してクラスに追加し、変換メソッドでそれらをチェックさせることができます。

これで、MongoDB 用の独自のオブジェクト マッピング フレームワークが作成されました。しかし、他の人がすでにやっているのに、なぜ車輪を再発明するのでしょうか? そのため、これを行う前に、 morphiaなどの既存のマッピング フレームワークがユースケースを満たしているかどうかを確認してください。それらはおそらく満たしており、数時間のプログラミングと数週間のデバッグを節約できます。

[意見]

インピーダンスの不一致の問題があるため、私は通常、リレーショナル データベースのコンテキストでオブジェクト リレーショナル マッパーを軽蔑しますが、MongoDB のような異種データベースでは、同じ基本クラスだけでなくいくつかの異なるクラスを持つオブジェクトを格納できるため、はるかに理にかなっています。 -醜い回避策なしで同じテーブルコレクション内の特定のフィールド。

[/意見]

于 2013-07-08T00:47:02.750 に答える