gpt4 book ai didi

java - 仅当对象不为 null 时才进行 Hibernate join

转载 作者:行者123 更新时间:2023-12-02 13:20:45 26 4
gpt4 key购买 nike

我有查询连接三个表来获取结果,但在某些情况下对象可能为空。在这种情况下,我们需要避免连接。

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();

上面的 PatientRemindersTO 中的 PatientTO.PatientId 详细信息可以为 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));

here是文档,您可以找到有关它的详细信息。

关于java - 仅当对象不为 null 时才进行 Hibernate join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43580677/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com