高度なカスタマイズ > サービスおよびインフラストラクチャのカスタマイズ > アドバンス照会機能 > QuerySpec > SELECT 節のシングルコラム定義式
  
SELECT 節のシングルコラム定義式
クラスが照会の結果セットで選択されている場合は、クラスの各コラムが SELECT 節に含まれるので、完全なオブジェクトが生成され、QueryResult に返されます。場合によっては、結果セットにシングルコラム条件式のみ必要とするものがあります。効率およびパフォーマンスを向上させるため、可能なかぎりシングルコラムを使用してください。以下の API では、SELECT 節のシングルコラム定義式がサポートされています。appendSelect(ColumnExpression a_column, int[] a_fromIndices, boolean a_selectOnly)
fromIndices パラメータは、照会のコラム定義式をクラスに関連付けるために適宜使用します。通常、ColumnExpression は From 節の 0 個以上のクラスに関連付けられます。ColumnExpression のタイプに基づいて a_fromIndices 配列のサイズを決定するには、以下の表を参照してください。たとえば、単一の ClassAttribute にはインデックスが 1 つ必要です。ClassAttribute 引数が 2 つと ConstantExpression 引数が 1 つある SQLFunction では、インデックスが 2 つ必要です。fromIndices 必要でない場合は、引数として Null 値を渡します。selectOnly パラメータでは、コラム定義式が結果オブジェクトとして返される必要があるかどうかを制御します。真の場合は、コラム定義式が select 節に格納されるだけで、結果としては返されません。
ColumnExpression パラメータでは、select 節に追加する照会コラムを指定します。以下に、具象的な ColumnExpression の実装を示します。
コラム定義式
説明
必要なインデックスの数
ClassAttribute
このクラスは、SQL ステートメントで使用できるクラス属性を表します。イントロスペクション情報は、関連テーブルおよびコラムの決定に使用されます。
1
SQLFunction
このクラスは、SQL ステートメント内の SQL 関数を表します。
0 以上。この数はすべての引数に必要なインデックスの数の合計です。
ConstantExpression
このクラスは、SQL ステートメント内の定数を表します。
0
KeywordExpression
このクラスは、SQL ステートメントで使用できる SQL キーワードを求める定義式を表します。
0
TableColumn
このクラスは、SQL ステートメントで使用できるテーブルコラムを表します。指定した正確なテーブルおよびコラム名が SQL ステートメントで直接使用されます。
0
以下の例は、部品番号の照会です。
QuerySpec qs = new QuerySpec();
int classIndex = qs.appendClassList(wt.part.WTPart.class, false);
ClassAttribute ca = new ClassAttribute(
wt.part.WTPartclass, wt.part.WTPart.NUMBER);
qs.appendSelect(ca, new int[] { classIndex }, false);
WTPart クラスを照会に追加すると、選択可能なパラメータが偽になるので注意してください。完全なオブジェクトは返されず、番号コラムだけが返されます。
結果は、QueryResult オブジェクトに返されます。QueryResult の各要素はある 1 行に対応し、Object 配列 (Object[]) です。この例では、番号コラムは各要素のインデックス 0 にあります。各結果の実際の Java タイプは、テーブルコラムおよび JDBC SQL の Java タイプに対するマッピングに基づいて決定されます。
親クラス (1 つまたは複数の永続性がある具象的なサブクラスを持つクラス) の照会動作では、各テーブルごとに SQL が実行されます。ColumnExpressions だけが SELECT 節に含まれる場合は、これらすべての SQL ステートメントが、個々のデータベース照会の代わりに、単一の UNION ステートメントとして暗黙的に実行されます。
コラム定義式だけを含む照会にも、アクセス制御が適用されます。内部では、コラムが照会に追加されてアクセス制御に必要な情報が取得されます。SQL 集約関数を使用する場合、この動作を理解することが重要です。SQL 集約関数を使用する場合、SELECT 節には、SQL 集約関数を持つ定義式のみを含める必要があります (または、GROUP BY 節に定義式を含める必要があります)。このようなステートメントにアクセス制御が適用されると、SQL が無効になります。