SpringDataJPA:使用Pageable检索包含N-1个对象的页面,而不多次接触DB

SpringDataJPA:使用Pageable检索包含N-1个对象的页面,而不多次接触DB,spring,spring-boot,spring-data-jpa,Spring,Spring Boot,Spring Data Jpa,使用SpringBoot2.3.5和Java11中的JpaRepository,我试图检索一页电影及其相应的类型(一部电影只有一种类型:它是N-1关联): 本机查询应该可以解决这个问题,但我想使用我的可分页对象。因此,如何使用Pageable检索包含N-1个对象的页面而不多次触摸DB?使用FETCH JOIN急切地加载类型,假设它是一个实体。类似于从电影obj FETCH JOIN obj.genre中选择obj,其中:genre为NULL或obj.genre=:genre@M.Deinum J

使用SpringBoot2.3.5和Java11中的JpaRepository,我试图检索一页电影及其相应的类型(一部电影只有一种类型:它是N-1关联):


本机查询应该可以解决这个问题,但我想使用我的可分页对象。因此,如何使用Pageable检索包含N-1个对象的页面而不多次触摸DB?

使用
FETCH JOIN
急切地加载
类型
,假设它是一个实体。类似于
从电影obj FETCH JOIN obj.genre中选择obj,其中:genre为NULL或obj.genre=:genre
@M.Deinum JOIN FETCH适用于列表,但不适用于页面。引发以下错误:查询指定了联接获取,但获取的关联的所有者不在选择列表中,这不重要。可能是由于计数与页面一起发出。您可以尝试在常规查询旁边指定一个专用计数查询,然后在不使用fetch连接的情况下执行该操作。
@Query("SELECT obj FROM Movie obj WHERE :genre IS NULL OR obj.genre = :genre")
Page<Movie> find(Genre genre, Pageable pageable);
Page<Movie> result = movieRepository.findAll(Pageable pageable);