我有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名称相匹配的类对象。
请帮助我实现这一目标。
此致 拉哈西克哈
答案 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,但你知道确切的名字)