假设我有以下表格:
TABLE1:
ID number
NAME varchar
TABLE2:
ID number (foreign key from first table)
KEY varchar
VALUE varchar
表2可能包含表1中元素的记录,但并非总是如此。
我需要一个命名查询,它将获取表1中的所有ID,如果可用,还会获取表2中特定键的信息,如果Table2中没有记录,则需要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 (....)
但是,我找不到命名查询进行外连接的方法,所以当我在Table2中没有结果时我得到空值,假设我需要通过KEY除了连接所具有的ID之外的Table2
答案 0 :(得分:0)
嗯,经过一番研究,找到了回答我自己的问题......
select Table1.Id, Table1.Name, Table2.Value
from Table1
left outer Join Table1.Table2 with Table2.key = 'someKey'
where Table1.Id in (?)
奇怪的是我没有在Hibernate文档中找到这个,但是,它现在正在按照我的预期进行。