Сложный запрос с jparepository. Три таблицы объединяются - PullRequest
0 голосов
/ 02 мая 2018

Я хочу отфильтровать объекты следующим образом: получить 10 лучших дисциплин, которые упорядочены по количеству учащихся (посещаемости) для сессий между определенным периодом времени.

  • Дисциплина имеет List<Session> sessions; // двунаправленный
  • Каждый сеанс имеет свой собственный List<Student> students; // двунаправленный

Итак, Студент ничего не знал о Дисциплине, только через Сессию. И я хочу написать, используя Spring JpaRepository что-то вроде:

List<Discipline> findTop10DisciplinesDistinctOrderBySessionsStudentsCountAndBySessionsBetween(Date from, Date to);

но есть некоторые ограничения. У меня это не сработало

Не найдено объектов недвижимости для типа Student! Пройденный путь: Discipline.sessions.students.

Запрос выглядит так (mysql):

select d.*
from session as ses 
inner join    
(select st.*
from student as st 
inner join session as ses on ses.id = st.session_id
where ses.time > (curdate() - interval 30 day)
group by st.session_id
order by count(st.id) desc 
limit 10) as st2
on ses.id = st2.session_id
inner join discipline as d on ses.discipline_id = d.id

Но как добавить этот запрос в репозиторий jpa?

1 Ответ

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

Производные запросы, те, которые создаются из имени метода, не подходят для вариантов использования, как ваши. Даже если это сработает, это приведет к громоздкому имени метода. Вместо этого используйте @Query с запросом JPQL или SQL.

...