2005.10.11 株式会社四次元データ 瀧下 浩
Hibernate 5章 Hibernate のコレクションと関連
- 5.1. 利用できるコレクション
- 5.2. 人間クラス
- 5.3. マッピングファイル
- 5.4. テーブルの準備
- 5.5. コレクションの永続化
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 テーブルの主キー同士を関連付けています。
PersonId | isbn |
---|---|
4 | ISBN4-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 テーブル
Foreign-key constraints: FOREIGN KEY (isbn) REFERENCES book(isbn)
Column | Type | Modifiers |
---|---|---|
id | integer | not null |
name | text | not null |
■Person_books テーブル
Column | Type | Modifiers |
---|---|---|
personId | integer | not null |
isbn | character(17) | not null |
Foreign-key constraints: FOREIGN KEY (isbn) REFERENCES book(isbn)