簡體   English   中英

僅當對象不為空時,Hibernate聯接

[英]Hibernate join only if the object is not null

我有查詢來聯接三個表以獲得結果,但是在某些情況下對象可以為null。 在這種情況下,我們需要避免加入。

Criteria patientCriteria = session.createCriteria(PatientRemindersTO.class);
patientCriteria.createAlias("patientTO", "patientTO");
patientCriteria.createAlias("doctorTO", "doctorTO");



patientCriteria.setProjection(Projections.distinct(Projections.projectionList()
                            .add(Projections.property("patientRemindersId"))
                            .add(Projections.property("doctorTO.doctorId"))
                            .add(Projections.property("doctorTO.phoneNumber"))
                            .add(Projections.property("patientTO.patientId"))
                            .add(Projections.property("patientTO.Mobile"))
                            .add(Projections.property("reminderSettingsType"))
                            ));

DetachedCriteria fcCriteria = DetachedCriteria.forClass(PatientRemindersScheduleTO.class,"patientRemindersScheduleTO");
fcCriteria.add(Restrictions.eq("patientReminderScheduleActive",'Y'));                                           
fcCriteria.setProjection(Projections.property("patientRemindersScheduleTO.patientRemindersId"));

patientCriteria.add(Subqueries.propertyIn("patientRemindersId", fcCriteria));

List results = patientCriteria.list();

在上面的PatientTO.patientId中,PatientRemindersTO中的詳細信息可以為null。 因此它不會返回任何結果。 有什么方法可以在創建別名之前執行空檢查。

感謝您的寶貴時間。

在這種情況下,您應該使用LEFT_OUTER_JOIN 因此您的條件將是->

Criteria patientCriteria = session.createCriteria(PatientRemindersTO.class);
patientCriteria.createAlias("patientTO", "patientTO", Criteria.LEFT_OUTER_JOIN));
patientCriteria.createAlias("doctorTO", "doctorTO", Criteria.LEFT_OUTER_JOIN));

是文檔,您可以找到有關它的詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM