2013-10-08 112 views
0

我有3個名爲Class,Person和PersonTalent的表。如何使用HQL INNERJOIN從多個表中檢索記錄

1.人員有人員ID和姓名。

2.類有人名單,每個人都有上述的id。

3.PersonTalent有人員ID和人員人才名稱。

現在我想根據Person Talent Name從Class中檢索記錄列表。 我如何在HQL INNER JOIN中實現這一點。

我已經試過這樣:

SELECT DISTINCT C FROM Class C, PersonTalent PT 
     INNER JOIN C.persons P 
     WHERE P.personId = PT.personId AND (PT.personId=1 AND PT.personTalentName='HQL') 

與上面的代碼我得到它匹配PERSONID所有類對象,但我需要這兩種人的身份證和人人才名相匹配的類對象的列表。

請幫我實現這一點。

問候, 拉哈西克哈

+0

爲什麼把你「P.personId = PT.personId和(PT.personId = 1。 ..)「這種personId將永遠是1 –

+0

試試這個:DISTINCT C從類C JOIN C.persons P,PersonTalent PT WHERE P.personId = PT.personId和PT.personTalentName ='HQL' –

+0

@angel_navarro我想具有人才「HQL」以及人員ID匹配的人也是如此。 –

回答

0
select distinct c.* 
from Class c 
inner join person_talent pt on c.person_id=pt.person_id 
WHERE PT.personId=1 AND PT.personTalentName='HQL' 
0

IMHO,我定義一類實體而不映射集與DB。

在那之後,我會先寫這樣:

SELECT C FROM Class C 
WHERE EXISTS(
    SELECT 'X' FROM Person P, Persontalent PT 
    WHERE P.fkClass = C.id 
    AND P.personId = PT.personId 
    AND PT.personId = 1 
    AND PT.personTalentName = 'HQL' 
) 

這第一次查詢後:

我會寫第二個查詢:

SELECT P 
FROM Person P, PersonTalent PT 
WHERE P.fkClass in (RESULT OF FIRST QUERY) 
AND P.personId = PT.personId 
AND PT.personId = 1 
AND PT.personTalentName = 'HQL' 

在此之後,我會寫一種方法將第一個查詢的結果(Class的列表)與第二個查詢的結果(Person的列表鏈接到特定的類實例)的結果聯繫起來。

P.S.我想你的Person實體中有一個屬性可以鏈接到Class實體(我已經命名爲fkClass,但你知道確切的名字)