【问题标题】:Complicated query with jparepository. Three tables join使用 jparepository 进行复杂查询。三表连接
【发布时间】:2018-05-02 19:08:29
【问题描述】:

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

  • 纪律有List<Session> sessions;//双向
  • 每个Session都有自己的List<Student> students;//双向

所以,学生对纪律一无所知,只通过 Session。 我想使用 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 存储库?

【问题讨论】:

  • 你有什么问题?
  • 为什么不创建一个查询,它可以更清楚?除了你的解决方案有什么问题?
  • 我想让它工作。如果使用@Query,也有一些限制

标签: java hibernate spring-data-jpa


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 2017-04-15
    • 2019-01-18
    • 2016-09-14
    • 2015-03-20
    • 2011-04-03
    • 1970-01-01
    相关资源
    最近更新 更多