0

假设我有以下表格:

TABLE1:
ID number
NAME varchar

TABLE2:
ID number (foreign key from first table)
KEY varchar
VALUE varchar

表 2 可能包含表 1 中元素的记录,但并非总是如此。

我需要一个命名查询,它将获取表 1 中的所有 ID,如果可用,还需要表 2 上特定键的信息或空值(如果表 2 中没有记录),如下所示:

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 (....)

但是,我找不到命名查询进行外连接的方法,因此当我在 Table2 中没有结果时,我得到空值,假设我需要通过一个 KEY 过滤 Table2,而不是连接的 ID。

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 回答