Hibernate命名查询外连接

时间:2013-08-05 11:43:46

标签: hibernate outer-join named-query

假设我有以下表格:

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

1 个答案:

答案 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文档中找到这个,但是,它现在正在按照我的预期进行。

相关问题