2013-08-05 71 views
0

比方說,我有如下表:Hibernate的命名查詢外連接

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具有表1中的記錄的數據,則此查詢只會帶來結果。

我已經Table 1和表2之間的關係設置成一樣的東西:

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

但是,我無法找到一種方式,命名查詢使外連接,所以我得到空值時,我有表2中沒有結果,假定除了連接的ID之外,我需要通過KEY過濾Table2。

回答

0

嗯,有點研究,發現答案我自己的問題後...

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

奇怪的事情我沒有找到這個Hibernate文檔,但很好,它現在在做什麼我的預期。