HQL-запрос, имеющий условия для связанных объектов связанных объектов

1

У меня есть следующий запрос:

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

PatientInfo, CustomerApplicationPatient связаны, а customerApplicationPatientId - столбец внешнего ключа.

CustomerApplicationPatient связан с CustomerApplication, Пациентом с customerApplicationId, patientId как столбцами внешней клавиши.

Вопрос. Получите все записи PatientInfo, данные customerApplicationId и PatientId. Мой запрос - хороший запрос в том смысле, что он не создает слишком много внутренних объединений или кросс-соединений? Есть ли лучший способ сделать это?

Я очень ценю любую помощь и надеюсь, что вопрос ясен.

Спасибо, Шри

  • 0
    Вы должны удалить тег sql как он не содержит SQL.
  • 0
    @ user1290226 Не могли бы вы указать мне код SQL в выше HQL-запрос. Благодарю.
Теги:
hibernate
jpa
hql

1 ответ

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 

Явные объединения будут переведены на точные заявления о соединении, которые вы ожидаете. Предыдущий запрос может быть не таким умным и может дважды присоединиться к одной и той же дочерней таблице.

  • 0
    Спасибо, и я бы попробовал оба запроса и увидел разницу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню