30.4.2. CMP フィールドのカラムマッピング
CMP フィールドの関係マッピング設定は
jbosscmp-jdbc.xml ファイルで行います。この構成は配下に cmp-field 要素と追加設定詳細を持つエンティティ element がある ejb-jar.xml に似ています。
以下に gangster bean の基本的なカラム名とデータタイプマッピングを示します。
<jbosscmp-jdbc>
<enterprise-beans>
<entity>
<ejb-name>GangsterEJB</ejb-name>
<table-name>gangster</table-name>
<cmp-field>
<field-name>gangsterId</field-name>
<column-name>id</column-name>
</cmp-field>
<cmp-field>
<field-name>name</field-name>
<column-name>name</column-name>
<not-null/>
</cmp-field>
<cmp-field>
<field-name>nickName</field-name>
<column-name>nick_name</column-name>
<jdbc-type>VARCHAR</jdbc-type>
<sql-type>VARCHAR(64)</sql-type>
</cmp-field>
<cmp-field>
<field-name>badness</field-name>
<column-name>badness</column-name>
</cmp-field>
</entity>
</enterprise-beans>
</jbosscmp-jdbc>
jbosscmp-jdbc.xml の cmp-field 要素の完全コンテンツモデルを以下に示します。

図30.4 JBoss エンティティ要素のコンテンツモデル
各要素の詳細は次の通りになります。
- field-name: この必須の要素は設定中の
cmp-field名です。ejb-jar.xmlファイル内でこのエンティティ用に宣言されるcmp-fieldのfield-name要素と一致しなければなりません。 - read-only: これは対象となるフィールドが読み取り専用であることを宣言するものです。このフィールドは JBoss ではデータベースに書き込まれません。読み取り専用フィールドについては 「Read-only フィールド」で説明します。
- read-only-timeout: read-only フィールドの値が有効と判断した期間をミリ秒単位で表します。
- column-name: この任意の要素は
cmp-fieldのマッピング先となるカラム名です。field-name値を使用するのがデフォルトです。 - not-null: この任意の要素は、このエンティティ用の表の自動作成時に JBoss が NOT NULL をカラム宣言の末尾に追加すべきことを示します。プライマリキーフィールド とプリミティブ用のデフォルト は not null です。
- jdbc-type: JDBC で準備されたステートメント内にパラメーターを設定するか、JDBC 結果セットからデータをロードする場合に使用される JDBC タイプです。有効なタイプは
java.sql.Typesで定義されます。sql-typeが指定された場合にのみ必要です。デフォルトの JDBC タイプはdatasourcemapping内のデータベースタイプに基づきます。 - sql-type: このフィールドの create テーブルステートメントで使用される SQL タイプです。有効な SQL タイプはデータベースベンダーによって異なります。
jdbc-typeが指定された場合にのみ必要です。デフォルトの SQL タイプはdatasourcemapping内のデータベースタイプによって決定されます。 - property: この任意の要素により dependent value class CMP フィールドのプロパティが永続ストアにどのようにマッピングされるか定義することができるようになります。これについては 「依存値クラス(DVC: Dependent Value Class)」で詳しく説明します。
- auto-increment: この任意のフィールドがあると、データベース層ごとに自動的に増分されることを示します。これはフィールドを生成されたカラムやかい部で操作されたカラムにマッピングするために使用します。
- dbindex: この任意のフィールドがあると、サーバーはデータベース内の該当するカラムにインデックスを作成することを示します。このインデックス名は fieldname_index になります。
- check-dirty-after-get: この値はプリミティブタイプとそのベーシック java.lang 不変ラッパー(
Integer、Stringなど)に false をデフォルト設定します。不変となる可能性があるオブジェクトに対しては、 JBoss は get オペレーションのあとダーティの可能性ありとしてそのフィールドをマークします。オブジェクトでのダーティチェックにおける金額的な負担が大きすぎる場合は、check-dirty-after-getを false に設定して最適化することができます。 - state-factory: このフィールドにダーティチェックを行うことができる状態ファクトリオブジェクトのクラス名を指定します。状態ファクトリクラスは
CMPFieldStateFactoryインターフェースを実装する必要があります。