HQL查询具有关联对象的关联对象的条件

时间:2014-09-04 20:46:32

标签: java sql hibernate jpa hql

我有以下查询:

FROM PatientInfo AS pi WHERE pi.customerApplicationPatient.customerApplication.customerApplicationId = :customerApplicationId AND pi.customerAppPatient.patient.patientId = :patientId

PatientInfo,CustomerApplicationPatient是关联的,customerApplicationPatientId是外键列。

CustomerApplicationPatient与CustomerApplication相关联,Patient与customerApplicationId,patientId作为外键列。

  

问题:获取给出customerApplicationId和PatientId的所有PatientInfo记录。从某种意义上说,我的查询是一个很好的查询,不会产生太多的内连接或交叉连接?有没有更好的方法呢?

我真的很感激任何帮助,希望问题很明确。

谢谢, 斯

1 个答案:

答案 0 :(得分:1)

当您需要在where子句中引用隐式连接时,不应该依赖隐式连接。

所以而不是:

FROM PatientInfo AS pi WHERE
pi.customerApplicationPatient.customerApplication.customerApplicationId = :customerApplicationId 
AND pi.customerAppPatient.patient.patientId = :patientId 

select pi 
from PatientInfo AS pi
inner join pi.customerApplicationPatient cap
inner join cap.customerApplication ca
inner join cap.patient p
where
    ca.customerApplicationId = :customerApplicationId 
    AND p.patientId = :patientId 

显式联接将转换为您期望的确切联接语句。上一个查询可能不那么聪明,可能会加入同一个子表两次。