shimashimaの日記: JPA(Java Persistence API)色々 2
仕事の関係でJPA(Java Persistence API)を調査しつつ、すでにできあがっているドメインモデルへの適用方法を試行錯誤している。利用するプロバイダは一般的なところでHibernate 3.2。今回のプロジェクトでは、JPAでカバー出来ない範囲はHibernate固有の機能での実現も可とされている。
JPAのみでもそれなりに行けるのだが、すでにできあがっているドメインモデルを永続化するにはやはり不足がある。一番大きいのは型変換の機能が無いこと。いや、実際出来ないことはないのだが、fieldを直接永続化する場合はJPAでは対応仕切れない。Propertyベースであれば、gettter/setterに変換ロジックを噛ますことで対応はできる。fieldベースで変換を行うにはHibernateのUserTypeを実装したクラスを用いるしか方法が無いようだ。
O/RマッピングはXMLを使用せず全てAnnotationで記述しているが、AnnotationはHibernateとJPAの混在が可能なようだ。仕様レベルでは判らないが、実際混在した状況で動いている。
現在調査中なのが、Fieldの型がInterface且つその実装クラスが継承関係を持ち「クラス階層毎にテーブル」マッピングを行う場合。つまり型変換というかOneToOne/OneToManyな関係をUserType経由で行う必要がある場合。
そもそもHibernateのTipsもJPAの情報も少なすぎて、ちょっと込み入った事をする場合は自力で調べる以外に方法がないのが辛い。
JPAの参考資料はそのまま英文の仕様書を落としてきて見るか、Apressの洋書「Pro EJB3」位しかない。だが、実際の込み入った事はこれだけでも不十分と感じるのだ。そもそも、JPAにあせて一からドメインモデルを作るのが筋なところを、既存のドメインモデルをJPAにあわせるのが無茶ということもあるのだろうが……。すでに有るドメインモデルといっても絶対ではないので、そのままではO/Rマッピングが不可能と判断すればいくらでも修正は可能なのだ。修正量が多くなれば、必然的に負荷も増すのでできることならHibernateの機能でなんとか逃げ切りたい。
揚げ足を取るようですが・・・ (スコア:1)
×:Java Persistance API
○:Java Persistence API
Re:揚げ足を取るようですが・・・ (スコア:1)
誤字指摘ありがとうございます。
えーさて、今日もJPA(Hibernate)と格闘してきました。一からドメインモデルを作れるのならば、O/Rに関してはかなり綺麗に、楽に行かれるんですけどね。