EJB 照会のデータ型操作の規則

Enterprise JavaBeans (EJB) 照会を使用して データ型を処理する場合は、 一定の規則に従う必要があります。

いずれの型の CMP フィールドも SELECT 文節では使用できます。 ただし、検索条件およびグループ化または順序付け操作で、以下の型のみのフィールドを使用する必要があります。

以下のすべての条件が生じた場合、
  • 上記でリストされた基本型の 1 つの CMP フィールドが、コンバーターを使用して SQL 列にマップされる
  • CMP フィールドが基本述部の前にある
  • この述部の後にリテラルまたは入力パラメーターがある
コンバーターの toData() メソッドが SQL 検索値の計算に使用されます。

例えば、整数値 10 をストリング値「Ten」にマップするコンバーターの場合、EJB 照会は以下のようになります。

e.cmp = 10

次の SQL 照会に変換されます。

column = 'Ten'

さらに複雑な述部を組み込むと、以下の例のようになります。

e.cmp * 10 >  e.salary

finder または select 照会では、「照会のプッシュダウンができません」というエラー・メッセージを受け取ります。 このような多機能照会には動的 EJB 照会サービスを使用します。動的照会ランタイムはアプリケーション・サーバーで述部を処理します。

全体的に、コンバーターは、等価性、照合シーケンス、およびヌル値を保存します。 コンバーターがこれらの要件に適合しない場合は、CMP フィールド比較演算に使用しないでください。

ユーザー型は比較演算または式に使用することができません。ただし、パス式にはユーザー型のサブ フィールドを使用することができます。 例えば、型が com.exam.Address である CMP addr フィールド、および番地、市区町村、および都道府県のサブフィールドを想定します。 この CMP フィールドの照会の以下の構文は無効です。

e.addr =  ?1

ただし、サブフィールドの 1 つを指定する照会は有効です。

e.addr.street = ?1

CMP フィールドは、Java シリアライゼーションを使用して SQL 列にマップできます。 通常、デプロイメント照会用の述部または式に CMP フィールドを使用することで、「照会のプッシュダウンができません」というエラー・メッセージが発生します。 動的照会ランタイムは、アプリケーション・サーバーでユーザー型のインスタンスすべてを読み取り、デシリアライズして、式を処理します。

ただし、この処理は負荷が高く、パフォーマンスが犠牲になります。 デプロイメント EJB 照会では、 コンポーザーを使用してパフォーマンスを維持することができます。 先の例では、バイナリー形式に addr フィールドをマップする場合、コンポーザーを使用して、各サブフィールドをデータベースのバイナリー列にマップします。


トピックのタイプを示すアイコン 概念トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cque_datatyperules
ファイル名:cque_datatyperules.html