第2回 HibernateとCaché、Javaとの好相性はどっちだ
ネクストデザイン
村山 徹
2006/1/13
次にオブジェクト指向データベースを使用する場合を見てみましょう。今回はCaché(バージョン5.0.11)を使用しています。なお、オブジェクト指向データベースの世界にはSQLのような標準規格がありません。従って、Caché以外のオブジェクト指向データベースを使用する場合には、本稿の内容とは異なるという点に注意してください。
ステップ1 ドメインモデルを作成する
Hibernateの場合と同じです。
ステップ2 永続クラスを定義する
Cachéでは、専用のGUIベースのツール(図3、以下Cachéスタジオ)を使って永続クラスを定義します。CaObjectクラスの定義内容は、リスト5のとおりです。ここには、Hibernateの場合とは違って、属性idがないことに注意してください。
図3 Cachéスタジオ |
Class CaObject |
リスト5 CaObjectクラスの定義内容 (1)CaObjectを永続クラスとして定義する(Persistentを継承することで永続クラスになる) (2)String型の属性Nameを定義する (3)Javaソースファイルを自動生成するように指定する |
次にCachéスタジオのビルドアクションを実行すると、Javaソースコード「CaObject.java」が生成されます。CaObject.javaには永続化のための振る舞いが実装されています。従って、かなり多くのメソッド、ステートメントを含んでいますので、本稿では例示しません。実際のアプリケーション開発者も、その内容はブラックボックスとして扱います。
ステップ3 テーブルを作成する
Cachéを使用するうえで、このステップを意識する必要はありません。テーブルに相当するものは、ステップ2のビルド時に作成されます。ほかのオブジェクト指向データベースの場合も、このステップは必要ないでしょう。
しかし、Cachéの場合は少し違います。Cachéではオブジェクト・アクセスという機能によってオブジェクトはそのままの形で保存され復元されますが、それと同時に、RDBMSと同様にSQLを使用しても永続化されたオブジェクトにアクセスすることができます。オブジェクト指向データベースでは、永続化された大量のインスタンスを検索する場合やバッチ処理では、その実行速度が問題になることがあります。このような場合にSQLクエリを利用することができるのです。これはHibernateでも同じです(SQLに似たHibernateクエリ言語を使った検索ができます)。
ステップ4 アプリケーションコードを書く
CaObjectのインスタンスを生成して永続化するコード(リスト6)を作成します。
Database db = |
リスト6 CaObjectのインスタンスを永続化するコード |
ステップ5 実行する
リスト6のコードが実行されると、以下の処理が行われます。
(1) | urlが指すCachéデータベースサーバに接続される |
(2) | トランザクションが開始される |
(3) | Cachéによって自動生成されたCaObject.javaのインスタンスが生成される |
(4) | 属性nameが設定される |
(5) | インスタンスが保存される |
(6) | インスタンスが終了される |
(7) | トランザクションがコミットされる |
(8) | データベース接続が終了される |
これで永続化できました。ここでHibernateの場合とCachéの場合を比較してみましょう。2つのアプリケーションコード(リスト4とリスト6の赤字部分)のコードを比べると、CaObjectのコンストラクタの引数が異なります。また、Hibernateでは、Session#save(Object object)であるのに対し、CachéではCaObject#save()です。この違いの理由の1つは、HibernateがJavaオブジェクト(POJO)を実行時にクラス拡張するのに対し、Cachéでは永続クラス自身を事前に自動生成する方式を採用しているためと思われます。
小さな違いに見えますが、設計モデルの作り方によっては、大きな違いになる場合もあります。この点については、次回最終回で触れたいと思います。
◇
今回は簡単なオブジェクト・モデルを使って、HibernateとCachéの使い方について紹介しました。新規のシステム開発で、それぞれの永続化方式の使用手順や作業内容を理解できたと思います。次回(最終回)は、実際のシステム開発では当然必要となるクラスの継承やオブジェクトの関連の扱い方について紹介します。そして、本稿のテーマである「永続化方式を比較する」の結果について考えてみたいと思います。(次回に続く)
筆者プロフィール |
村山 徹(むらやま とおる) ネクストデザイン有限会社 代表取締役。 オブジェクト指向技術に惹かれ、管理者よりも技術者としての活動を優先すべく、1998年1月、現在の会社を設立する。以降、オブジェクト指向技術を使ったシステムの開発、セミナー講師、UMLツールの企画、開発、販売に携わる。 |
3/3 |
Index | |
対決! O/Rマッパー vs. オブジェクト指向DB(2) HibernateとCaché、Javaとの好相性はどっちだ |
|
Page
1 ・はじめに ・Hibernateを使ったJavaオブジェクトの永続化 ステップ1 ドメインモデルを作成する ステップ2 永続クラスとマッピング情報を作成する |
|
Page 2 ステップ3 テーブルを作成する ステップ4 アプリケーションコードを書く ステップ5 実行する |
|
Page 3 ・Cachéを使ったJavaオブジェクトの永続化 ステップ1 ドメインモデルを作成する ステップ2 永続クラスを定義する ステップ3 テーブルを作成する ステップ4 アプリケーションコードを書く ステップ5 実行する |
対決! O/Rマッパー vs. オブジェクト指向DB |
- Oracleライセンス「SE2」検証 CPUスレッド数制限はどんな仕組みで制御されるのか (2017/7/26)
データベース管理システムの運用でトラブルが発生したらどうするか。DBサポートスペシャリストが現場目線の解決Tipsをお届けします。今回は、Oracle SE2の「CPUスレッド数制限」がどんな仕組みで行われるのかを検証します - ドメイン参加後、SQL Serverが起動しなくなった (2017/7/24)
本連載では、「SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は、「ドメイン参加後にSQL Serverが起動しなくなった場合の対処方法」を解説します - さらに高度なSQL実行計画の取得」のために理解しておくべきこと (2017/7/21)
日本オラクルのデータベーススペシャリストが「DBAがすぐ実践できる即効テクニック」を紹介する本連載。今回は「より高度なSQL実行計画を取得するために、理解しておいてほしいこと」を解説します - データベースセキュリティが「各種ガイドライン」に記載され始めている事実 (2017/7/20)
本連載では、「データベースセキュリティに必要な対策」を学び、DBMSでの「具体的な実装方法」や「Tips」などを紹介していきます。今回は、「各種ガイドラインが示すコンプライアンス要件に、データベースのセキュリティはどのように記載されているのか」を解説します
|
|