2005.10.24 株式会社四次元データ 瀧下 浩
- 6.1. DTD を見てみよう
- 6.2. class 要素
- 6.3. id 要素
- 6.4. generator 要素
- 6.5. property 要素
- 6.6. many-to-one 要素
- 6.7. one-to-one 要素
6.4 generator 要素
id 要素は、generator 要素を持つことができます。これは、主キーとなるプロパティの値を発生させる方法 を指定するための要素です。大きく自動的に値を取得してくれるものと、自分で値を登録するものに分かれます。
<id name="id" type="long" column="uid" unsaved-value="0"> <generator class="net.sf.hibernate.id.TableHiLoGenerator"> <param name="table">uid_table</param> <param name="column">next_hi_value_column</param> </generator> </id>
generator 要素の class
属性では、ジェネレータとして利用するクラスを指定します。このクラスには、org.hibernate.id.IdentifierGenerator
インタフェースを実装するクラスを指定することが可能で、Hibernate
には、同インタフェースを実装した組込みのジェネレータクラスがいくつか用意されています。組込みのジェネレータには、ショートカット名が用意されており簡単に利用できるようになっています。ほとんどの場合、この組込みのジェネレータを利用することになるでしょう。
ここでは、いくつかの重要な組込みジェネレータを紹介します。
ショートカット名 | 値のtype | 備考 |
---|---|---|
identity | int,long,short | DB2, MySQL, MS SQL Server, Sybase, HypersonicSQLのアイデンティティ・カラムを サポートします。 |
sequence | int,long,short | DB2, PostgreSQL, Oracle, SAP DB, McKoiのシーケンス、 またはInterbaseのジェネレータを使います。 |
hilo | int,long,short | hi/loアルゴリズムを使用してIDを生成します。 |
assigned | アプリケーションがIDを与える方法です。 |
assigned ジェネレータは、アプリケーションに識別子を割り当てさせたい場合に利用します。このジェネレータは、オブジェクトの識別子プロパティーに既に割り当てられている識別子を使います。このため、このジェネレータを利用しているエンティティは、セッションの saveOrUpdate() メソッドによって保存することができません。セッションの save() もしくは update() を明示的に呼び出すようにする必要があります。
6.5 property 要素
property 要素では、永続化される JavaBean のプロパティに関する記述を行います。
<property name="propertyName" (1) column="column_name" (2) type="typename" (3) update="true|false" (4) insert="true|false" (4) formula="arbitrary SQL expression" (5) access="field|property|ClassName" (6) />
番号 | 名前 | 必須 | 説明 |
---|---|---|---|
(1) | name | ○ | プロパティー名 |
(2) | column | optional | マッピングされるテーブルのカラム名 省略されると name 属性と同じ値となる。 |
(3) | type | optional | Hibernate 型を示す名前 |
(4) | update,insert | optional |
マッピングされたカラムが、SQL の UPDATE(INSERT)文に含まれることを指定する。 false にセットすると、このプロパティは UPDATE(INSERT)で更新(挿入)されない。デフォルトは true |
(5) | formula | optional | プロパティ値が算出(導出)される場合、導出のためのSQL文を指定する。 |
(6) | access | optional | プロパティの値にアクセスするのに Hibernate が使用する戦略。 デフォルトは property 。property を指定した場合、getter/setter を利用してプロパティにアクセスする。直接フィールドの値にアクセスさせるには「field」を指定する。また、net.sf.hibernate.property.PropertyAccessor インタフェースを実装するクラスを指定することも可能。 |