Нет необходимости в двух запросах, которые вы можете просто использовать:
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())