SpringのJPA連携機能
せっかくSpringに触ったので、JPA連携機能を少し調べてみました。
どうやら、org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessorというクラスがポイントっぽいですね。このクラスを登録し、更にweb.xmlでPersistenceUnitのJNDI定義を書いておけば、あとはEJB3でJPAを利用するのと同じ感覚で管理されたEntityManagerを利用できるみたいです(ただし、複数PersistenceUnitを利用する場合、unitNameと登録beanのIDをあわせておく必要があるみたい)。これはなかなか便利。EJB3が事実上JSF1.2上でしかまともに使えないのに比べ、SpringのJPAサポートはほぼ同じ感覚でStruts等の連携可能なFW上で利用することができます。Seasar2も同じことは出来るのですが、JPA実装用のライブラリが個別に必要になるのと、Seasar2独自の設定方法を色々と覚えないと利用し辛いのが欠点でしょうか・・・
上記の例は、JavaEE5サーバのJPAを使う場合ですが、Tomcatのようなサーブレットコンテナ上で管理されたEntityManagerを利用する為の機能も用意されているみたいです。これは次回にでも試してみたいと思います。
JpaSupportとかJpaTemplateとかいう、JPAを便利に使えるらしいユーティリティも用意されてます。うーん・・・これは正直、どこが便利なのか全然解りませんでした(汗)JPAのAPIを完全に隠蔽してしまっているのですが、JPAに比べて特に便利な機能を提供しているわけでもないっぽい。パラメータをMapで受け取れるところくらい? ・・・でも、検索で沢山のパラメータ使うときはCriteria機能をHibernate Native APIで呼び出すとかしないと駄目だろうし、登録・更新系ならEntityに値を入れるから、あまりありがたみは感じません。JPAの売りの一つである、Queryによる流れるようなインターフェイス記述もできなくなってしまいます。Hibernateの頃から、Springはこういう機能を売りにしてるみたいですけど、個人的にはこの機能は使いたくないなぁ(汗)まぁ、使いたくなければ使わなくて大丈夫というのが、Springの良いところなんですけど。