JPQL - Объединения - MultipleTables и пустой ResultList - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть запрос в JPQL через 5 таблиц, но если одна из таблиц имеет значение NULL, весь запрос завершается ошибкой, а resultList пуст и выдает исключение. С другой стороны, если все таблицы не содержат ноль, это работает как ожидалось.

Как реализовать, чтобы возвращать все объекты, где таблица не равна нулю, и объекты, где значение равно нулю? Так что я бы получил - Object1 [], ноль, ноль, ноль, например ... и не только пустой список результатов ... Большое спасибо :)

public List<Object[]> getAdditionalInformation(String ppin) {
    Query query = em.createQuery("SELECT p, pl, r, d, do FROM Patient p JOIN p.placements pl JOIN pl.room r"
            + " JOIN r.department d JOIN d.doctors do where p.pin = :ppin");
    query.setParameter("ppin", ppin);

    return query.getResultList();
}

@Transactional
    public AdditionalPD getAdditional(String ppin) {
        List<Object[]> list = hr.getAdditionalInformation(ppin);

        AdditionalPD adp = new AdditionalPD();
        Patient patient = null;
        Placement placement = null;
        Room room = null;
        Department department = null;
        Doctor doctor = null;

        for(Object[] object : list) {
            patient = (Patient) object[0];
            placement = (Placement) object[1];
            room = (Room) object[2];
            department = (Department) object[3];
            doctor = (Doctor) object[4];
        }

        adp.setPatientFirstName(patient.getFirstName());
        adp.setPatientLastName(patient.getLastName());
        adp.setAge(countAge(ppin));
        adp.setFrom(placement.getFrom());
        adp.setTo(placement.getTo());
        adp.setRoomName(room.getName());
        adp.setDepartmentName(department.getName());
        adp.setDoctorFirstName(doctor.getFirstName());
        adp.setDoctorLastName(doctor.getLastName());

        return adp;
    }

@GetMapping("/additional/pin/{ppin}")
    public String additionalInformation(@PathVariable String ppin, Model model) {

        AdditionalPD adp = has.getAdditional(ppin);

        model.addAttribute("adp", adp);

        return "additional";
    }

1 Ответ

0 голосов
/ 30 апреля 2018

Используйте LEFT JOIN вместо JOIN. JPQL-соединения по умолчанию INNER JOIN s.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...