目次へ

2005.10.11 株式会社四次元データ 瀧下 浩

5.3 マッピングファイル

Person クラス用のマッピングファイル(Person.hbm.xml)は、以下のようになります。

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping
    PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

    <class name="com.techscore.hibernate.chapter3.Person" table="Person">
        <id name="id" type="int" unsaved-value="-1" >
            <column name="id" sql-type="number" not-null="true"/>
            <generator class="sequence"/>
        </id>
        <property name="name" />
        <set name="books" table="Person_Books" inverse="true">
            <key column="PersonId" />
            <many-to-many class="com.techscore.hibernate.chapter1.Book" column="isbn" />
        </set>
    </class>
</hibernate-mapping>
	

14行目〜17行目で set 要素として books プロパティについて記述しています。
table として指定しているのは、Person と Book を関連付ける「ジョインテーブル」です。 ジョインテーブルでは、Person テーブルと Book テーブルの主キー同士を関連付けています。

PersonIdisbn
4ISBN4-87311-21X-X
・・・・・・

ここで指定している各要素と属性について以下にまとめます。

要素、属性説明
set要素コレクションのプロパティについての記述であることを宣言しています。
name属性対象となるプロパティが、books であることを宣言しています。
table属性関連付けを行うためのテーブルを指定しています。
inverse属性 今回の場合、人→本の関連だけでなく、本→人のマッピングも可能であることを記述しています。
lazy属性人オブジェクトをロードすると同時に books コレクションの中身もロードするように指定しています。
key要素キーとなるカラムが Person_Books テーブルの PersonId であることを指定しています。
many-to-many要素 人オブジェクトひとつに対して多数の本オブジェクトがマッピングされ、ひとつの本オブジェクトに対して、複数の人オブジェクトが マッピングされることを意味しています。
class属性このプロパティ(books)が Book クラスのコレクションであることを意味します。
columns属性Book クラスの主キープロパティと Person_books テーブルの isbn カラムが関連していることを記述しています。

5.4 テーブルの準備

ここで必要になるテーブルは、Person テーブルと Person_books ジョインテーブルです。

■Person テーブル
ColumnTypeModifiers
idintegernot null
nametextnot null

■Person_books テーブル

ColumnTypeModifiers
personIdintegernot null
isbncharacter(17)not null

Foreign-key constraints: FOREIGN KEY (isbn) REFERENCES book(isbn)

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp