我想用下一种方式过滤实体: 获得不同的10个顶级学科,这些学科是由学生在一段时间内计算会议次数(出勤率)。
List<Session> sessions;
//双向List<Student> students;
//双向所以,学生对纪律没有任何了解,只能通过Session。 我想用 Spring JpaRepository 这样写:
List<Discipline> findTop10DisciplinesDistinctOrderBySessionsStudentsCountAndBySessionsBetween(Date from, Date to);
但有一些限制。它对我不起作用
找不到类型学生的财产数量!遍历路径: 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存储库?
答案 0 :(得分:1)
派生查询,从方法名称创建的查询不适合作为您的用例。即使它会起作用,也会导致一个笨重的方法名称。改为使用带有JPQL或SQL查询的@Query
。