Java 如何使用HQL INNERJOIN从多个表检索记录

Java 如何使用HQL INNERJOIN从多个表检索记录,java,mysql,hql,Java,Mysql,Hql,我有3个名为Class、Person和PersonTalent的表 1.此人有个人ID和姓名 2.班级有人员名单,每个人都有上述id 3.PersonTalent具有人员Id和人员人才名称 现在,我想根据人才姓名从类中检索记录列表。 如何在HQL内部联接中实现这一点 我试过这样做: SELECT DISTINCT C FROM Class C, PersonTalent PT INNER JOIN C.persons P WHERE P.personId = PT

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

1.此人有个人ID和姓名

2.班级有人员名单,每个人都有上述id

3.PersonTalent具有人员Id和人员人才名称

现在,我想根据人才姓名从类中检索记录列表。 如何在HQL内部联接中实现这一点

我试过这样做:

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的类对象列表

请帮助我实现这一目标

问候,,
Rajasekhar

IMHO,我定义了一个类实体,但没有将集合映射到DB

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'
之后,我会这样写:

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实体中有一个属性可以链接到类实体(我已经命名为fkClass,但您知道确切的名称)

为什么要将您的“p.personId=PT.personId和(PT.personId=1…”,这样personId将始终是1尝试这样:C与C类不同加入C.personId,PersonTalent PT,其中P.personId=PT.personId和PT.personTalentName='HQL'@angel\u navarro我想要具有天赋'HQL'的人员以及匹配的人员ID。仅供参考,同一个人可以在不同的类中。您必须筛选类实体中存在的人员数组。关于过滤,一种方法是在实体定义中应用过滤器,另一种方法是在不使用集合的情况下获取类对象,然后根据您的条件提取集合的元素