2005.10.24 · 技術と道具

Hibernateをいじる(4)

さて、昨日の続きです。 今日は、5つのJavaBeans(永続クラス)に対するマッピングファイルを作り、サンプルプログラムを動かしてみます。

1.マッピングファイル

省略できるところは省略して、出来る限り分かりやすく、簡単なマッピングファイルを作ろうとすると、以下のようになります。 xml 今回の5つの永続クラスの中では、最も複雑なStudyのマッピングファイルなので、わりと手の込んだものになっています。(実は、今回のサンプルで使用するマッピングファイルの設定要素をすべて使っています) (1)classエレメント 何のクラスに関する設定なのかを書きます。 hibernate-mappingエレメントでpackageアトリビュートを書かなかったので、nameはパッケージをフルに書きます。 また、クラス名とテーブル名が違う場合は、tableアトリビュートを書きます。 (2)idエレメント テーブルでプライマリキーとなるプロパティを指定します。 nameアトリビュートで永続クラスでのプロパティ名を指定します。テーブルのカラム名が別なら、columnアトリビュートで指定できます。 idエレメントの中には、generatorエレメントが書いてあります。これは、プライマリキーの値をどのように設定するかという指定。いくつか種類がありますが、大雑把に言えば、RDBの機能を使って連番を振るか、アプリケーションで指定するからHibernateは余計なことをしなくて良いと言うか…です。 (3)propertyエレメント プライマリキー以外のプロパティを指定します。 テーブルのカラム名が違えばcolumnアトリビュートで指定するのは、idエレメントと同じです。 但し、他の永続クラスへの関連の場合は、別のエレメントで指定します。propertyエレメントで書くと、恐るべきことに、そのオブジェクトをVARBINARYで持つことになります。(その永続クラスがSerializableな場合。そうでなければ、例外となる) (4)many-to-oneエレメント 他の永続クラスへの関連の場合は、これです。但し、名は体を表すで、多対1の場合に限ります。1対多の場合は何らかのコレクションが必要となりますから、別のエレメントがあります。 nameアトリビュートで永続クラスでのプロパティ名を、columnアトリビュートは相手先のキー(外部キー)を自テーブルが持つ際のカラム名です。 (5)listエレメント 1対多の場合のコレクションを表現します。この例ではlistを使っていますが、他にset、map、bag等が使えます。どれを使ってもアトリビュートや、子エレメントは似通っています。 nameアトリビュートは、永続クラスでのコレクションのプロパティ名です。 key子エレメントのcolumnアトリビュートは、1対多の多側(つまり相手先)が持つ、1側(自分)の外部キーのカラム名です。注意すべきは、このカラムは自テーブルにはないということです。 双方向関連の場合、このkeyエレメントのcolumnアトリビュートの値と、相手先のmany-to-oneエレメントのcolumnアトリビュートの値を同じにすると都合が良いでしょう。 one-to-many子エレメントは、classアトリビュートで相手先のクラス名を指定します。(つまりコレクションに何クラスのオブジェクトが入っているかということです) 最後に、index子エレメントは索引を持つコレクション(listやmap)の場合に必須です。columnアトリビュートで索引カラム名を指定します。このカラムも自テーブルではなく、相手先テーブルのカラムとなります。 https://inoccu.com/blog/2005/10/24/234807.html

2005/10/24 23:22
← Hibernateをいじる(3)
Hibernateをいじる(5) →
井上 研一
経済産業省推進資格ITコーディネータとして中小企業のDX・AI活用の現場で伴走支援を行う。「ITCプロセスガイドライン4.0」および「中小企業向けAI活用ガイド」執筆メンバー。著書・講演多数。ITエンジニアとして25年以上の実務経験。AI導入の実務に10年以上携わる。自ら開発したAIサービス「Gen2Go」が北九州発!新商品創出事業の認定を受ける。2026年4月より北九州市立大学大学院マネジメント研究科の学生としての顔も持つ。

本サイトおよびブログに掲載している内容は、特に明記のない限り、井上研一個人の見解に基づくものです。所属・関与する組織、団体、企業、研究会等の公式見解を示すものではありません。