仅当对象不为null时才进行Hibernate连接

时间:2017-04-24 05:52:54

标签: java hibernate

我有查询连接三个表来获得结果,但在某些情况下,对象可以为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。所以它不会返回任何结果。有没有办法在创建别名之前执行空检查。

感谢您宝贵的时间。

1 个答案:

答案 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,您可以找到有关它的详细信息。