7.4. 双方向関連
7.4.1. 一対多(One to many)/多対一(many to one) リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
双方向多対一関連 は最も一般的な関連です。以下の例で標準的な親子関係を示しています。
<class name="Person">
<id name="id" column="personId">
<generator class="native"/>
</id>
<many-to-one name="address"
column="addressId"
not-null="true"/>
</class>
<class name="Address">
<id name="id" column="addressId">
<generator class="native"/>
</id>
<set name="people" inverse="true">
<key column="addressId"/>
<one-to-many class="Person"/>
</set>
</class>
create table Person ( personId bigint not null primary key, addressId bigint not null )
create table Address ( addressId bigint not null primary key )
List (または他のインデックス付きのコレクション)を使う場合、 外部キーの key カラムを not null に設定します。Hibernateは、コレクション側からの関連を管理し、各要素のインデックスをメンテナンスします。 結果、update="false" かつ insert="false" と設定することで、仮想的に反対側をinverseにします。
<class name="Person">
<id name="id"/>
...
<many-to-one name="address"
column="addressId"
not-null="true"
insert="false"
update="false"/>
</class>
<class name="Address">
<id name="id"/>
...
<list name="people">
<key column="addressId" not-null="true"/>
<list-index column="peopleIdx"/>
<one-to-many class="Person"/>
</list>
</class>
外部キーカラムが
NOT NULL であるならば、コレクションマッピングの <key> 要素を not-null="true" と定義することは重要です。入れ子になった <column> 要素だけではなく、 <key> 要素も not-null="true" と宣言しないようにしてください。