如何使用HQL INNER JOIN从多个表中检索记录

时间:2013-10-08 09:50:30

标签: java mysql hql

我有3个名为Class,Person和PersonTalent的表。

1.Person有人名和姓名。

2.Class有人员名单,每个人都有如上所述的身份证。

3.PersonTalent有人名和人才名称。

现在我想根据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匹配的Class对象,但我需要列出与Id和Person Talent名称相匹配的类对象。

请帮助我实现这一目标。

此致 拉哈西克哈

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分:0)

恕我直言,我定义了一个没有用DB映射集合的Class实体。

之后,我会先这样写:

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'

在此之后,我会编写一个方法来将第一个查询的结果(类的列表)与第二个查询的结果(链接到您的特定类实例的Person的列表)链接起来。

P.S。我想你的Person实体中有一个属性可以与Class实体链接(我已经命名为fkClass,但你知道确切的名字)