0

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

1.Person有Person ID和Name。

2.Class有人员列表,每个人都有上面提到的id。

3.PersonTalent 有person Id 和Person Talent Name。

现在我想根据 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 匹配的所有类对象,但我需要与 person Id 和 Person Talent name 匹配的类对象列表。

请帮助我实现这一目标。

问候, 拉贾塞卡

4

2 回答 2

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'
于 2013-10-08T10:19:56.800 回答
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'

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

PS 我想你的 Person 实体中有一个属性可以与 Class 实体链接(我命名为 fkClass 但你知道确切的名称)

于 2013-10-08T10:26:24.880 回答