次のテーブルがあるとします。
TABLE1:
ID number
NAME varchar
TABLE2:
ID number (foreign key from first table)
KEY varchar
VALUE varchar
テーブル 2 には、テーブル 1 の要素のレコードが含まれている可能性がありますが、常にではありません。
テーブル 1 からすべての ID を取得し、可能であればテーブル 2 の特定のキーの情報、またはテーブル 2 にレコードがない場合は null 値を取得する名前付きクエリが必要です。
select Table1.Id, Table1.Name, Table2.Value
from Table1
left Join Table1.Table2
where Table1.Id in (?)
and Table2.key = 'someKey'
ただし、このクエリは、Table2 に Table1 のレコードのデータがある場合にのみ結果を返します。
私はすでに Table1 と Table2 の関係を次のように設定しています。
<map name="Table2" table="Table2" cascade="all-delete-orphan" inverse="true" lazy="true" batch-size="20">
<cache usage="nonstrict-read-write"/>
<key column="ID"/>
<index column="KEY" type="string"/>
<one-to-many class="somePersistentClass"/>
</map>
必要なことを実行するクエリを作成するにはどうすればよいですか? DB2 の場合、必要なものに対する実用的なクエリは次のとおりです。
select Table1.Id, Table1.name, Table2.Value
from Table1
left Join Table2 on Table1.id = Table2.id and Table2.key = 'someKey'
and Table1.Id in (....)
ただし、名前付きクエリが外部結合を作成する方法が見つからないため、結合に含まれる ID とは別に KEY で Table2 をフィルター処理する必要があると仮定して、Table2 に結果がない場合は null 値を取得します。