0

次のテーブルがあるとします。

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 値を取得します。

4

1 に答える 1

0

さて、少し調査した後、私自身の質問に対する答えを見つけました...

select Table1.Id, Table1.Name, Table2.Value
from Table1
left outer Join Table1.Table2 with Table2.key = 'someKey'
where Table1.Id in (?)

奇妙なことに、Hibernate のドキュメントではこれを見つけられませんでしたが、まあ、期待通りの動作をしています。

于 2013-08-05T12:05:41.243 に答える