如何使用Spring数据jpa @Query注释直接获取学生列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Spring数据jpa @Query注释直接获取学生列表相关的知识,希望对你有一定的参考价值。

我有两个实体:Group和Student是ManyToMany关系,Group是所有者。

现在定义一个从JpaRepository扩展的GroupRepository,并希望使用@Query注释声明一个方法,直接获取给定GroupId的Student列表。怎么样?

方法返回值应该是List或Page,不知道如何使用查询语言定义。

我知道如何让一个Group实体急切地获取该组的所有学生,如下所示:

@Query("select group from Group group left join fetch group.students where group.id=:id")
Group findOneWithEagerRelationships(@Param("id") Long id);

非常感谢任何帮助。

答案

如果您有这样的模型:

@Entity
class Group {

   @Id Ling id;

   @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
   private List<Student> students;

   //...
}

@Entity
class Student {

   @Id Long id;

   @ManyToMany(mappedBy = "groups")
   private List<Group> groups;

   //...
}

然后,为了让所有学生通过组回购,您可以制作这样的方法:

interface GroupRepo extends JpaRepository<Group, Long> {
    @Query("select s from Group g join g.students s where g.id = ?1")
    Page<Student> getAllStudentsByGroupId(Long groupId, Pageable pageable);
}

资料来源:12

以上是关于如何使用Spring数据jpa @Query注释直接获取学生列表的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring Data JPA 和 @Query 注释仅获取第一个/最后一个元素

如何更新 Spring Data JPA @Modifying @Query 查询中的 JPA/Hibernate @Version 字段?

是否可以在 Spring Data JPA Repository 的 @Query 注释中使用 PostgreSQL 匿名块(PL/pgSQL)?

我可以在 Spring Data JPA 存储库方法中将 @Query 定义与规范结合起来吗?

如何在不使用查询缓存的情况下缓存 Spring Data JPA 查询方法的结果?

使用@Query和休眠更新spring数据jpa中的布尔值