Enterprise JavaBeans (EJB) 照会機能は、
データベースに対する一定の制限に従う必要があります。
このセクションでは、その制限について説明します。
一般データベース制限
特定の照会に関連するエンタープライズ Bean はすべて、同じデータ・ソースにマップする必要がありま
す。
EJB 照会は、クロス・データ・ソース結合操作をサポートしません。
特定のデータベース制限
異なるデータベース製品は、EJB 照会ステートメントに組み込むことができるエレメントに異なる制限をもうけます。
以下は、これらの制限のリストです。ご使用の環境に適用するかどうかをデータベース管理者と確認してください。
- 他のデータベースによってサポートされていないため、特定の関数は DB2 のみに対して稼働する照会で使用されます。
これらの関数は、特定の CMP フィールドをマップするのに使用される場合、日時演算式、
特定のスカラー関数 (ベンダー間で移植可能としてリストされ ない)、および 暗黙のスカラー関数を含みます。例えば、int 数値型を 10 進数 (5,2) 型フィールドにマップするとします。DB2 以外の
データベースに対してデプロイされると、この特定のマッピングと CMP フィールドを含む finder または select 照会は、「照会のプッシュダウンができません」というエラー・メッセージが表示されて失敗します。
- ストリング型の CMP は、データベースで文字ラージ・オブジェクト (CLOB) にマップされると、データベースでは CLOB 比較がサポートされていないため、比較演算に使用できません。
- データベースは、比較演算子とともにリテラルまたは入力パラメータ
ーとして使用されるストリング値の長さに制限を設けることがあります。
これらの制限は照会パフォーマンスに悪影響を与えることがあります。
例えば、z/OS プラットフォーム上の DB2 では、実行時の ?1 の値の長さが 255 より大きいと、検索「name = ?1」が失敗することがあります。
- 数値 CMP 型を異なる型を含む列にマッピングすると、予期しない結果が発生することがあります。
例えば、int 数値型を 10 進型 (5,2) の列にマッピングする場合を考えてみます。
このシナリオでは、データベースからエンタープライズ Bean CMP フィールドへ
の転送、およびデータベースへの逆転送の間、正確な 10 進値 (例えば、値 12.25) を保存しません。
このマッピングによって、整数と初期値の置換が起こります (この場合、12)。
したがって、CMP フィールドがこの性質のマッピングを使用するときは、比較演算で CMP フィールドを使用しないでください。
- 幾つかのデータベースは、java.sql.Time のセマンティクスに対応するデータ型をサポートしません。
例えば、型 java.sql.Time の CMP フィールドが Oracle DATE 列にマップされると、
列の値の年月日部分はマッピングで切り捨てられるため、時間の比較は予期しない結果をもたらす場合があります。
- データベースによっては、
ゼロ長ストリング値 ( '' ) はヌル値として扱われ、この方法は照会の結果に影響を与えることがあります。
移植性を考えて、ゼロ長ストリング値の使用は避けてください。
- 整数演算規則を使用して 2 整数値間の除算を実行するデータベースもあれば、
非整数規則を使用するデータベースもあります。
この違いは、両方の種類のデータベースを使用する環境では望ましくない場合があります。
移植性を考えて、EJB 照会の際には整数値の除算は避けてください。
- UDB DB2 for i5/OS の現行リリースは、「yyyy-mm-dd-hh.mm.ss.nnnnnn」という形式の TIMESTAMP 値のみをサポートしています。
これは、java.sql.Timestamp クラスでサポートされる標準形式 「yyyy-mm-dd-hh mm.ss.nnnnnn」とは互換性がありま
せん。
TIMESTAMP スカラー関数は、java.sql.Timestamp オブジェクトのストリング表記を
DB2 UDB for i5/OS が認識できる値に変換する場合に使用する必要があります。