30.13. データソースのカスタマイズ
JBoss には、Cloudscape、DB2、DB2/400、Hypersonic SQL、InformixDB、InterBase、MS SQLSERVER、MS SQLSERVER2000、mySQL、Oracle7、Oracle8、Oracle9i、PointBase、PostgreSQL、PostgreSQL 7.2、SapDB、SOLID、Sybase など、多くのデータベースに対してあらかじめ定義されたタイプマッピングがあります。提供されているマッピングを使用したくない場合、または自分のデータベース用のマッピングが提供されていない場合は、新しいマッピングを定義する必要があります。提供されているマッピングに誤りを見つけた場合、あるいは新しいデータベース用に新しいマッピングを作成した場合は、SourceForge で JBoss プロジェクトページにパッチを掲載してください。
30.13.1. タイプマッピング
データベースのカスタマイズは、
jbosscmp-jdbc.xml
記述子の type-mapping
セクションで行います。type-mapping 要素のコンテンツモデルは、図30.17「jbosscmp-jdbc type-mapping 要素のコンテンツモデル」 に示してあります。
図30.17 jbosscmp-jdbc type-mapping 要素のコンテンツモデル
各要素は次のとおりです。
- name: この必須の要素は、データベースのカスタマイズを識別する名前を指定します。これは、defaults およびエンティティ内に見られる
datasource-mapping
要素によるマッピングを参照するのに使用されます。 - row-locking-template: この必須の要素により、選択された行で行ロックを作成するのに使用する
PreparedStatement
テンプレートが与えられます。テンプレートは、次の 3 つの引数をサポートしなければなりません。- select 句
- from 句。テーブルの順序は、現在のところ対応していません。
- where 句
select ステートメントで行レベルのロッキングがサポートされない場合は、この要素を空にしなければなりません。行レベルのロッキングの最も一般的な形式は、たとえばSELECT ?1 FROM ?2 WHERE ?3 FOR UPDATE
などのような select for update です。 - pk-constraint-template: この必須の要素は、create table ステートメントにおいてプライマリキー制約を作成するのに使用する
PreparedStatement
テンプレートを渡します。このテンプレートは、次の 2 つの引数をサポートしなければなりません。- プライマリキー制約名。これは常に
pk_{table-name}
です。 - コンマで区切ったプライマリキー列名のリスト
create table ステートメントでプライマリキー制約句がサポートされない場合は、この要素を空にしなければなりません。プライマリキー制約の最も一般的な形式はCONSTRAINT ?1 PRIMARY KEY (?2)
です。 - fk-constraint-template: これは、別のステートメントで外部キー制約を作成するのに使用するテンプレートです。テンプレートは、次の 5 つの引数をサポートしなければなりません。
- テーブル名
- 外部キー制約名。これは常に
fk_{table-name}_{cmr-field-name}
です。 - コンマで区切った外部キー列名のリスト
- 参照テーブル名
- コンマで区切った参照プライマリキーカラム名のリスト
データソースが外部キー制約をサポートしない場合は、この要素を空にしなければなりません。外部キー制約の最も一般的な形式はALTER TABLE ?1 ADD CONSTRAINT ?2 FOREIGN KEY (?3) REFERENCES ?4 (?5)
です。 - auto-increment-template: これは、自動インクリメントカラムを指定するための SQL テンプレートを宣言します。
- add-column-template:
alter-table
が true であるとき、この SQL テンプレートは、既存のテーブルに列を追加するための構文を指定します。デフォルト値はALTER TABLE ?1 ADD ?2 ?3
です。各パラメーターは次のとおりです。- テーブル名
- カラム名
- カラムタイプ
- alter-column-template:
alter-table
が true であるとき、この SQL テンプレートは、既存のテーブルから列をドロップするための構文を指定します。デフォルト値はALTER TABLE ?1 ALTER ?2 TYPE ?3
です。各パラメーターは次のとおりです。- テーブル名
- カラム名
- カラムタイプ
- drop-column-template:
alter-table
が true であるとき、この SQL テンプレートは、既存のテーブルからカラムをドロップするための構文を指定します。デフォルト値はALTER TABLE ?1 DROP ?2
です。各パラメーターは次のとおりです。- テーブル名
- カラム名
- alias-header-prefix:この必須の要素により、エイリアスヘッダーの作成に使用する接頭辞が付与されます。エイリアスヘッダーは、EJB-QL コンパイラーにより生成されるテーブルエイリアスの先頭に付けられ、名前の重複を防ぎます。エイリアスヘッダーは alias-header-prefix + int_counter + alias-header-suffix のように構成されます。エイリアスヘッダーの例は、alias-header-prefix が "
t
" 、alias-header-suffix が "_
"の場合でt0_
になります。 - alias-header-suffix: この必須の要素により、生成されるエイリアスヘッダーの接尾辞部分が付与されます。
- alias-max-length: この必須の要素により、生成されるエイリアスヘッダーの最大許容長が渡されます。
- subquery-supported: この必須の要素は、この
type-mapping
サブクエリーを true とするか false とするかを指定します。一部の EJB-QL 演算子は既存のサブクエリーにマッピングされます。subquery-supported
が false の場合、EJB-QL コンパイラーは left join を使用し、null になります。 - true-mapping: この必須の要素は、EJB-QL クエリーにおける true の識別を定義します。例としては、
TRUE
、1
、(1=1)
があります。 - false-mapping: この必須の要素は、EJB-QL クエリーにおける false の識別を定義します。例としては、
FALSE
、0
、(1=0)
があります。 - function-mapping: この任意の要素は、EJB-QL 関数から SQL 実装へのマッピングを 1 つ以上指定します。詳しくは「関数マッピング」 を参照してください。
- mapping: この必須の要素は、Java タイプから対応する JDBC および SQL タイプへのマッピングを指定します。詳しくは 「マッピング」 を参照してください。