2011-04-26

Morphia Feasibility Study, part 3 - Spring configuration

Morphia の DAO オブジェクトを Spring で設定してみる。Morphia グループディスカッションのスレッド「IoC in Morphia BasicDao」を参考にした。


エンティティの定義
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 1part 2 の例では、Morphia.map() メソッドで一つずつクラスを指定したが、コンストラクタの引数に Set でまとめて与えることもできる。


アプリケーションコード
DAO オブジェクトを生成し、エンティティを操作するコードは以下のとおり。上の XML が クラスパス上の app-context.xml ファイルに保存されているとする。


Person クラスでは、accounts フィールドに対して @Reference アノテーションを付けている。つまり、Account オブジェクトを独立したドキュメントとして保存し、Person ドキュメントは Account ドキュメントを id で参照する。

注意すべきは、Account オブジェクトを先に保存することである。保存してはじめて Account ドキュメントの id 値が決定するからである。


保存されたドキュメント
上のコードで保存されたドキュメントの JSON 表現を見てみる。


Account ドキュメントへの参照は、コレクション名とドキュメント id で与えられる。


課題:
  • TypeConverter を設定する方法
リソース: