我正在使用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
内强制使用此别名as
? 4.3.11. Projections部分记录了不,甚至没有示例显示@Query
与interface projection