エンティティの定義
Spring Data Document の例から引用。
それぞれ、MongoDB コレクション "spring.person" と "spring.account" に対応付ける。これらのコレクション名は一見すると階層的だが、MongoDB にとってはフラットである。すなわち、"spring" というコレクションが存在するわけではなく、両者に依存関係もない。しかし、このような名前を使用することで、データどうしの関係が人間にとってわかりやすくなる。
DAO の定義
Morphia にはBasicDAO クラスが用意されており、エンティティと id の型をパラメータに指定するだけで簡単に DAO を定義できる。
Spring コンテナの設定
さて本題。Spring の XML による設定は以下のとおり。
ここで、"#{ T(example.spring.Person) }" は、java.lang.Class のインスタンス、すなわち example.spring.Person.class を表す。part 1 と part 2 の例では、Morphia.map() メソッドで一つずつクラスを指定したが、コンストラクタの引数に Set でまとめて与えることもできる。
アプリケーションコード
DAO オブジェクトを生成し、エンティティを操作するコードは以下のとおり。上の XML が クラスパス上の app-context.xml ファイルに保存されているとする。
Person クラスでは、accounts フィールドに対して @Reference アノテーションを付けている。つまり、Account オブジェクトを独立したドキュメントとして保存し、Person ドキュメントは Account ドキュメントを id で参照する。
注意すべきは、Account オブジェクトを先に保存することである。保存してはじめて Account ドキュメントの id 値が決定するからである。
保存されたドキュメント
上のコードで保存されたドキュメントの JSON 表現を見てみる。
Account ドキュメントへの参照は、コレクション名とドキュメント id で与えられる。
課題:
- TypeConverter を設定する方法
- DAOSupport - morphia - Describes the Morphia DAO support classes - http://code.google.com/p/morphia/wiki/DAOSupport
- Morphia | Google Group - http://groups.google.com/group/morphia
- Collections - MongoDB manual - http://www.mongodb.org/display/DOCS/Collections
- mongodb-hello at master from SpringSource/spring-data-document-examples - GitHub - https://github.com/SpringSource/spring-data-document-examples/tree/master/mongodb-hello