我想用以下方式过滤实体: 获取不同的 10 个顶级学科,这些学科按一段时间内类(class)的学生计数(出勤)排序。
- 纪律有
List<Session> sessions;
//双向 - 每个 session 都有自己的
List<Student> students;
//双向
所以,学生对纪律一无所知,只能通过 session 了解。 我想使用 Spring JpaRepository 编写类似的内容:
List<Discipline> findTop10DisciplinesDistinctOrderBySessionsStudentsCountAndBySessionsBetween(Date from, Date to);
但有一些限制。它对我不起作用
No property count found for type Student! Traversed path: 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 存储库?
最佳答案
派生查询(从方法名称创建的查询)不适合您的用例。即使它可以工作,也会导致一个难以处理的方法名称。请改用带有 JPQL 或 SQL 查询的 @Query
。
关于java - jparepository 的复杂查询。三张表连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50141858/