Spring Data:如何与@Query一起使用Pageable? (接口投影)

时间:2018-05-07 18:33:09

标签: jpa spring-data spring-data-jpa

我正在使用Spring Data 2.0.6.RELEASE版本

我对以下关于分页和投影的看法感到困惑

域类的名称为Persona,使用lombok并注明JPA@Entity等。)

我有关于投影的以下内容:

public interface PersonaProjection {

    String getId();
    String getNombre();
    String getApellido();
    Date getFecha();

}

关于存储库我有以下内容:

interface PersonaDataJpaCrudRepository extends PagingAndSortingRepository<Persona, String> {

    Page<PersonaProjection> findAllProjectedBy(Pageable pageable);

}

直到这里一切正常。

@Controller有这个身体:

@GetMapping(path="/complete", produces=MediaType.TEXT_HTML_VALUE)
public String findAllComplete(Pageable pageable, Model model){
    logger.info("findAllComplete ...");
    Page<PersonaProjection> personasPage = personaService.findAll(pageable);
    model.addAttribute("personasPage", personasPage);
    return "persona/findAllComplete";
}

该视图以Thymeleaf为基础,并显示数据预期的方式

实际上,从三天前开始,我正在使用以下内容:

@Query("SELECT p.id, p.nombre, p.apellido, p.fecha FROM Persona p")
Page<PersonaProjection> findAllProjectedBy(Pageable pageable);

为了视觉目的,观察它有一个@Query。它有助于快速了解检索哪些字段。

并且运行良好,但只是直到今天没有任何变化,实际上该字段的视图保留在blank中,没有异常通过控制台通过{{{{{{ 1}}方法我可以确认:

@Controller

前三天显示的输出显示 添加Page request [number: 0, size 10, sort: UNSORTED] PageNumber: 0, PageSize: 10, Offset: 0 Page 1 of 11 containing com.sun.proxy.$Proxy84 instances Number: 0, NumberOfElements: 10 Size: 10, TotalElements: 107, TotalPages: 11 PageNumber: 0, PageSize: 10, Offset: 0

在进行研究后,我发现了以下这个类的例子:

它有以下方法:

Query

观察此说明:

  

确保为与投影字段匹配的项目添加别名。

因此,如果我使用:

    /**
     * Projection interfaces can be used with manually declared queries, too. Make sure you alias the projects matching
     * the projection fields.
     *
     * @return
     */
    @Query("select c.firstname as firstname, c.lastname as lastname from Customer c")
Collection<CustomerProjection> findsByProjectedColumns();

正常但是观察是多余的,关于别名与字段名称相同。

如下问题:

  • 为什么第一个@Query("SELECT p.id as id, p.nombre as nombre, p.apellido as apellido, p.fecha as fecha FROM Persona p") Page<PersonaProjection> findAllProjectedBy(Pageable pageable); 版本在几天前工作,现在没有?在这里我很困惑。 (我假设涉及@Query
  • 为什么在com.sun.proxy.$Proxy84 instances内强制使用此别名as4.3.11. Projections部分记录了,甚至没有示例显示@Queryinterface projection
  • 一起工作

0 个答案:

没有答案