Java 使用jparepository的复杂查询。三个表连接在一起

Java 使用jparepository的复杂查询。三个表连接在一起,java,hibernate,spring-data-jpa,Java,Hibernate,Spring Data Jpa,我想用下一种方法过滤实体: 获得不同的10个顶级学科,这些学科按学生人数(出勤率)在某段时间内的课程顺序排列 规程具有列表会话//双向 每个课程都有自己的学生名单//双向 所以,学生对纪律一无所知,只是通过课程。 我想用Spring来写,比如: List<Discipline> findTop10DisciplinesDistinctOrderBySessionsStudentsCountAndBySessionsBetween(Date from, Date to); 但是如

我想用下一种方法过滤实体: 获得不同的10个顶级学科,这些学科按学生人数(出勤率)在某段时间内的课程顺序排列

  • 规程具有
    列表会话//双向
  • 每个课程都有自己的
    学生名单//双向
所以,学生对纪律一无所知,只是通过课程。 我想用Spring来写,比如:

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

但是如何将此查询添加到jpa存储库?

派生查询,从方法名称创建的查询不适合您的用例。即使它可以工作,也会导致一个笨拙的方法名。将
@Query
与JPQL或SQL查询一起使用。

您的问题是什么?为什么不创建一个查询,它会更清晰?除此之外,你的解决方案还有什么问题?我想让它发挥作用。如果要使用@Query,也有一些限制
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