我有查询连接三个表来获得结果,但在某些情况下,对象可以为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。所以它不会返回任何结果。有没有办法在创建别名之前执行空检查。
感谢您宝贵的时间。
答案 0 :(得分:1)
在这种情况下,你应该使用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));
here是doc,您可以找到有关它的详细信息。