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 要素のコンテンツモデル」 に示してあります。
jbosscmp-jdbc type-mapping 要素のコンテンツモデル

図30.17 jbosscmp-jdbc type-mapping 要素のコンテンツモデル

各要素は次のとおりです。
  • name: この必須の要素は、データベースのカスタマイズを識別する名前を指定します。これは、defaults およびエンティティ内に見られる datasource-mapping 要素によるマッピングを参照するのに使用されます。
  • row-locking-template: この必須の要素により、選択された行で行ロックを作成するのに使用する PreparedStatement テンプレートが与えられます。テンプレートは、次の 3 つの引数をサポートしなければなりません。
    1. select 句
    2. from 句。テーブルの順序は、現在のところ対応していません。
    3. where 句
    select ステートメントで行レベルのロッキングがサポートされない場合は、この要素を空にしなければなりません。行レベルのロッキングの最も一般的な形式は、たとえば SELECT ?1 FROM ?2 WHERE ?3 FOR UPDATE などのような select for update です。
  • pk-constraint-template: この必須の要素は、create table ステートメントにおいてプライマリキー制約を作成するのに使用する PreparedStatement テンプレートを渡します。このテンプレートは、次の 2 つの引数をサポートしなければなりません。
    1. プライマリキー制約名。これは常に pk_{table-name} です。
    2. コンマで区切ったプライマリキー列名のリスト
    create table ステートメントでプライマリキー制約句がサポートされない場合は、この要素を空にしなければなりません。プライマリキー制約の最も一般的な形式は CONSTRAINT ?1 PRIMARY KEY (?2) です。
  • fk-constraint-template: これは、別のステートメントで外部キー制約を作成するのに使用するテンプレートです。テンプレートは、次の 5 つの引数をサポートしなければなりません。
    1. テーブル名
    2. 外部キー制約名。これは常に fk_{table-name}_{cmr-field-name} です。
    3. コンマで区切った外部キー列名のリスト
    4. 参照テーブル名
    5. コンマで区切った参照プライマリキーカラム名のリスト
    データソースが外部キー制約をサポートしない場合は、この要素を空にしなければなりません。外部キー制約の最も一般的な形式は 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 です。各パラメーターは次のとおりです。
    1. テーブル名
    2. カラム名
    3. カラムタイプ
  • alter-column-template: alter-table が true であるとき、この SQL テンプレートは、既存のテーブルから列をドロップするための構文を指定します。デフォルト値は ALTER TABLE ?1 ALTER ?2 TYPE ?3 です。各パラメーターは次のとおりです。
    1. テーブル名
    2. カラム名
    3. カラムタイプ
  • drop-column-template: alter-table が true であるとき、この SQL テンプレートは、既存のテーブルからカラムをドロップするための構文を指定します。デフォルト値は ALTER TABLE ?1 DROP ?2 です。各パラメーターは次のとおりです。
    1. テーブル名
    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 の識別を定義します。例としては、TRUE1(1=1) があります。
  • false-mapping: この必須の要素は、EJB-QL クエリーにおける false の識別を定義します。例としては、FALSE0(1=0) があります。
  • function-mapping: この任意の要素は、EJB-QL 関数から SQL 実装へのマッピングを 1 つ以上指定します。詳しくは「関数マッピング」 を参照してください。
  • mapping: この必須の要素は、Java タイプから対応する JDBC および SQL タイプへのマッピングを指定します。詳しくは 「マッピング」 を参照してください。