使用jparepository进行复杂查询。三张桌加入

时间:2018-05-02 19:08:29

标签: java hibernate spring-data-jpa

我想用下一种方式过滤实体: 获得不同的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存储库?

1 个答案:

答案 0 :(得分:1)

派生查询,从方法名称创建的查询不适合作为您的用例。即使它会起作用,也会导致一个笨重的方法名称。改为使用带有JPQL或SQL查询的@Query