Hibernate Объединение двух HQL-запросов без связей - PullRequest
0 голосов
/ 04 октября 2019

Я работаю с Hibernate, и это мой сценарий:
У меня есть две сущности, без какой-либо связи между ними (единственные отношения, которые существуют, это логические отношения, и это проблема).
Две сущностипохожи на Student и FinalExam.

Student и Exam похожи на:

class Student {
    private String name;
    private String surname;
    private int age;
}

class FinalExam {
    private String candidateName;
    private String candidatesurname;
    private int mark; 
}

Я хотел бы создать HQL-запрос, содержащий следующие столбцы: имя, фамилия, передано.
Имя и фамилия - это имя и фамилия ученика, связь между двумя сущностями.
Передаваемый столбец может быть истинным или ложным. Он показывает, сдал ли студент экзамен.
То есть, если в FinalExam существует строка с оценкой выше 6.

Как мне этого добиться?
Я бы чего-то хотелвот так:

select s.name, s.surname, ( Select count(*)>1 from FinalExam exam
                            where exam.name = s.name
                            and exam.surname = s.surname
                            and exam.mark > 6) 
from Student s

1 Ответ

1 голос
/ 15 октября 2019

Вы должны добавить свойство в класс Student, как показано ниже:

private boolean passed;

это свойство не должно сохраняться в БД (если вы используете JPA, аннотирование аннотируется объявлением @Transient, если вы используете отображение XML, вы не добавляете XML-файл или, если вы добавляете, вы можете использовать тег формулы со свойством insert и update, для которого установлено значение false.

О вашем запросе (я предполагаю, что вы добавили это свойство в свойкласс):

SELECT s.name, s.surname,
    (SELECT
        CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END
    FROM FinalExam f
    WHERE f.name = s.name
    AND f.surname = s.surname
    AND f.mark > 6)
FROM Student s
...