Spring Hibernate Ассоциация «многие ко многим» с переходной ценностью - PullRequest
0 голосов
/ 01 мая 2018

У меня есть два стола Учитель и ученик

Teacher(Teacher_id, Teacher_name)
Student(student_id, student_name)
Teacher_Student(id, Teacher_id, Student_id)

У меня есть соответствующие модели для каждой таблицы, такие как Teacher.java Student.java и TeacherStudent.java

Я хочу иметь возможность получить набор результатов со списком учителей и информацией no_of_students на учителя. Например:

Teacher_id, Teacher_name, No_of_students

Я не хочу получать список учителей, а затем циклически перебирать каждый teacher_id и находить количество учеников.

У меня есть SQL-запрос, который делает это одним запросом, но как мне заставить это работать в спящем режиме? Также я хочу, чтобы значение No_of_Students было временным.

1 Ответ

0 голосов
/ 01 мая 2018

Нет необходимости в двух запросах, которые вы можете просто использовать:

Query query = em.createQuery("SELECT t.id, t.name, t.listStudent.size() FROM Teacher");

Это вернет список массива Object следующим образом:

List<Object[]> result = query.getResultList();

Для получения информации вы можете использовать:

List<Teacher> listTeachers = new ArrayList<>();
for(Object[] info : result){
    listTeachers.add(
       new Teacher(
          (Long) info[0],   // the id
          (String) info[1], // the name
          (Long) info[2]    // the number of students
       )
   );
}

Я предполагаю, что в вашей Учительской организации у вас есть конструктор:

public Teacher(String id, String name, Long nbrStudent){
   this.id = id;
   this.name = name;
   this.nbrStudent = this.listStudent.size();
}

и переменная @Transient:

@Transient
private @Getter @Setter Long nbrStudent;

Или за один шаг:

Query query = em.createQuery(
        "SELECT com.namepackage.Teacher(t.id, t.name, t.listStudent.size()) FROM Teacher"
);
List<Teacher> result = query.getResultList();

Обратите внимание, что я использовал com.namepackage.Teacher(t.id, t.name, t.listStudent.size())

...