У меня есть родительский класс: ClinicalAct
У меня есть отец class: Консультация, расширяющая ClinicalAct
У меня есть 2 дочерних класса: MedicalOrder и TreatmentSession, которые расширяют консультацию.
У меня есть реестр в базе данных, который представляет MedicalOrder, скажем, с SID=. 1.
Если я запрашиваю ClinicalAct (дедушка), где sid = 1, я получаю правильный запрос с необходимыми соединениями для получения иерархии.
Если я запрашиваю MedicalOrder (дочерний элемент) где sid = 1, я получаю правильный запрос, соединяющийся с предком.
Но если я запрашиваю Консультацию (отец), где sid = 1, я получаю около 30 ненужных объединений, связанных с некоторыми другими объектами, сопоставленными некоторыми из этих уровни.
Дополнительные данные:
- У меня нет отношений OneToOne
- Все ManyToOne на всех уровнях имеют FetchType.LAZY
--- JQL QUERY ---
SELECT consultation FROM ConsultationImpl consultation WHERE consultation.sid = 2190990
--- SQL QUERY ---
select ...
from
SCH_CONSULTATIONS c1_0 -- The father table
join
COM_CLINICAL_ACTS c1_1
on c1_0.SID=c1_1.SID -- The grandfather table
left join
TRE_TREATMENT_SESSIONS c1_2
on c1_0.SID=c1_2.SID -- Child 1
left join
SCH_MEDICAL_ORDERS c1_3
on c1_0.SID=c1_3.SID -- Child 2
-- Innecesary joins from here
left join
COM_ACT_STATUS a1_0
on a1_0.sid=c1_1.ACTIVITY_STATUS
left join
COM_CLI_ACT_TYPES c2_0
on c2_0.SID=c1_1.CLINICAL_ACT_TYPE
left join
COM_SERVICES s1_0
on s1_0.SID=c1_1.SERVICE
left join
COM_SUBENCOUNTERS s2_0
on s2_0.SID=c1_1.SUBENCOUNTER
left join
COM_SUBENCOUNTERS s3_0
on s3_0.SID=c1_1.SUBENCOUNTER
left join
SCH_AG_SES_SP_ACTS a2_0
on a2_0.sid=c1_0.AGE_SES_SPAN_ACT
left join
SCH_AGENDAS a3_0
on a3_0.sid=c1_0.AGENDA
left join
SCH_AGENDAS a4_0
on a4_0.sid=c1_0.AGENDA
left join
SCH_CONS_ORIGINS c3_0
on c3_0.sid=c1_0.CONSULTATION_ORIGIN
left join
MOR_EXTER_DOCTORS e1_0
on e1_0.sid=c1_0.EXTERNAL_DOCTOR
left join
SCH_CONSULTATIONS f1_0
on f1_0.SID=c1_0.FATHER_CONSULTATION
left join
SCH_APPS_CONFIRM l1_0
on l1_0.sid=c1_0.LAST_CONFIRM
left join
SCH_MED_REC_REQS m1_0
on m1_0.sid=c1_0.MED_RECORD_REQUEST
left join
COR_OPERATORS o1_0
on o1_0.SID=c1_0.OPERATOR
left join
COM_FACILITIES o2_0
on o2_0.SID=c1_0.ORIGIN_FACILITY
left join
COM_GEN_PRACTITNRS p1_0
on p1_0.SID=c1_0.PLAC_GENERAL_PRACT
left join
COM_PERSONAL p2_0
on p2_0.SID=c1_0.PLACER_DOCTOR
left join
COM_FACILITIES p3_0
on p3_0.SID=c1_0.PLACER_FACILITY
left join
COM_SERVICES p4_0
on p4_0.SID=c1_0.PLACER_SERVICE
left join
SCH_VALIDATION_STATUS v1_0
on v1_0.SID=c1_0.VALIDATION_STATUS
left join
SCH_WEB_CONSULTATIONS w1_0
on w1_0.SID=c1_0.WEB_CONSULTATION
left join
SCH_WL_STATUS w2_0
on w2_0.sid=c1_0.WL_STATUS
left join
DHS_SESSION_DEFS s4_0
on s4_0.sid=c1_2.SESSION_DEF
left join
COM_SUBENCOUNTERS s5_0
on s5_0.SID=c1_2.SUBENCOUNTER_TRE_SESSION
left join
TRE_TREAT_PRESCRIPTIONS t1_0
on t1_0.SID=c1_2.TREATMENT_PRESCRIPTION
left join
COM_PERSONAL f2_0
on f2_0.SID=c1_3.FILLER_DOCTOR
left join
COR_OPERATORS s6_0
on s6_0.SID=c1_3.SAMPLE_OPERATOR
left join
MOR_SPAN_TYPES s7_0
on s7_0.sid=c1_3.SPAN_TYPE
left join
ADM_SURG_WAIT_LIST s8_0
on s8_0.sid=c1_3.REQUESTED_TEST_SWL
left join
COM_TIM_RECURRENCS t2_0
on t2_0.sid=c1_3.TIME_RECURRENCE
where
c1_0.SID=2190990
Подробнее здесь: https://stackoverflow.com/questions/787 ... -add-joins