Java 如何使用HQL INNERJOIN从多个表检索记录
我有3个名为Class、Person和PersonTalent的表 1.此人有个人ID和姓名 2.班级有人员名单,每个人都有上述id 3.PersonTalent具有人员Id和人员人才名称 现在,我想根据人才姓名从类中检索记录列表。 如何在HQL内部联接中实现这一点 我试过这样做: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
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的类对象列表
请帮助我实现这一目标
问候,,
RajasekharIMHO,我定义了一个类实体,但没有将集合映射到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。仅供参考,同一个人可以在不同的类中。您必须筛选类实体中存在的人员数组。关于过滤,一种方法是在实体定义中应用过滤器,另一种方法是在不使用集合的情况下获取类对象,然后根据您的条件提取集合的元素