java - jparepository 的复杂查询。三张表连接

标签 java hibernate spring-data-jpa

我想用以下方式过滤实体: 获取不同的 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/

相关文章:

java - this.getHibernateTemplate().delete(bp) 不会立即删除

java - 我们如何向微调器添加不同的声音(音乐播放)

java - 索引超出范围(文件读取)

java - Kadane 算法实现返回错误结果

java - Spring/JPA/Hibernate 持久实体 : Nothing happen

java - Hibernate 搜索与具有复合 ID 的 IndexEmbedded 属性关联

java - 带有变量的java中的正则表达式

java - @DataJpaTest : how to stop loading unneeded @ConfigurationProperties

java - 如何在内存中嵌入 MariaDB4j 以替换 JUnit 测试中默认的 Spring DataSource?

java - Spring jpa :inbound-channel-adapter configuration