- ベストアンサー
O/Rマッピングの実際
例えばHiberNateですが・・SQL文の ・複数表の結合 ・UNION ・副問い合わせ etc など設定次第で全ての機能は実現可能なのでしょうか?。 開発現場での実際などご教授頂ければ幸いです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ORマッピングツールの位置づけを「JavaからDBを読み書きするためのツール」と考えているなら、発想の転換が必要です。 DBのテーブルと項目があって、それをJavaオブジェクトで読み書きしようと考えるのではなく、先にオブジェクトありきで、このオブジェクトをそのままDBに保存することができて、またいつでも再取得できるとしたらどうでしょうか。 これはオブジェクトデータベースというDBの考え方ですが、まだあまり一般化していません。 リレーショナルデータベース+ORマッピングツールの利用の目的はは、仮想的なオブジェクトデータベースを作ることにあると思います。 Hibernateを利用すると、Javaオブジェクトを保存することができます。実際に保存される先はリレーショナルデータベースですから、マッピングの設定をする必要がありますが、その内部で結合や副問い合わせがされているかどうかということはあまり気にしなくて良いはずです。 Hibernateではボトムアップアプローチ(既存DBからオブジェクトにマッピングする考え方)とトップダウンアプローチ(JavaオブジェクトをDBへ保存する考えかた)が言及されていますが、 Hibernateは後者に向いていると思います。 以上、乱文で申し訳ありませんが、参考にしてください。
その他の回答 (2)
- arakororin
- ベストアンサー率39% (80/205)
>など設定次第で全ての機能は実現可能なのでしょうか?。 「Hibernate」で「設定しだい」で「全ての機能」というと、できるとも言えできないともいえます。 Hibernateでのアクセスの方法は何通りか用意されていて簡易に利用できる順に ・Hibernateのメソッド ・クライテリア ・HQL(半分SQL) ・ODBC接続(SQL直書き) があります。(他にもあるかも) 当然下のほうほど多くのことができ、上のほうほど単純な事しかできません。Hibernateを利用するのであれば、Hibernateのメソッドかクライテリアだけで構築すべきです。ODBC接続やHQLでSQLを書くのでは何のためにHibernateを使うのかさっぱりわかりません。 Hibernateの機能を生かしたいのであれば、DBの機能の多くは使えなくなります。無理やりDBの多くの機能を利用する事もできますがそれではHibernateのいいところを殺してしまうことになります。 Hibernateの紹介の本やHPでは極めて単純なテーブルを使用した例を引用するのみで、「こんなに簡単にアクセスできますよ」と紹介していますが、現実のシステム開発ではレアケースともいえる限定された例であり、現実的ではありません。 テーブル間の関連が単純で検索条件も単純という場合に、より強くHibernateを生かせる、といえます。ですので、Hibernateを生かすためにテーブルの非正規化を行ったり、都合のいいViewを作るなどの対策が必要になります。本末転倒に感じますが…。 実務でHibernateをうまく利用することは現在のバージョンでは非常に難しいといえます。Hibernateをまだ本格的に使用していない人は幻想を抱きますが、実際のPJでは多くの問題に直面します。なぜ使えないかを身をもって経験することも重要だと思います。
SQLの全ての機能が実現可能かどうかはわかりませんが・・・。 JOIN関係は、many-to-oneなどを定義しておけばいいでしょう。またHQLにINNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOINの機能があります。 副問い合わせはHQLでSQLとほぼ同じ形で利用可能です。 他、HQLでは各種の集約関数、ORDER BY,GROUP BY、2項演算子など一通りサポートしていたと思います。詳しくはドキュメントを調べてみれば良いでしょう。