Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 转换Spring数据类型JPA页面内容_Java_Spring_Hibernate_Spring Data Jpa - Fatal编程技术网

Java 转换Spring数据类型JPA页面内容

Java 转换Spring数据类型JPA页面内容,java,spring,hibernate,spring-data-jpa,Java,Spring,Hibernate,Spring Data Jpa,我使用的是Spring数据JPA,我有一个使用JPASpecificationExecutor的Paging和SortingRepository。我将规范和Pageable实例传递到此存储库的.findAll()方法,以获取页面 然而,我的联系人实体有很多额外的字段和映射,我不需要在前端使用这些字段和映射。因此,我有一个只包含必要字段的ContactDto,我有一个方法可以从Contact转换为ContactDto private ContactDto convertToContactDto(C

我使用的是Spring数据JPA,我有一个使用JPASpecificationExecutor的
Paging和SortingRepository
。我将
规范
Pageable
实例传递到此存储库的
.findAll()
方法,以获取
页面

然而,我的
联系人
实体有很多额外的字段和映射,我不需要在前端使用这些字段和映射。因此,我有一个只包含必要字段的
ContactDto
,我有一个方法可以从
Contact
转换为
ContactDto

private ContactDto convertToContactDto(Contact contact) {
    //do the conversion
}
如何使用此转换方法将
页面
转换为
页面

我可以获得
页面的内容
,并像这样进行转换

final Page<Contact> contactPage = pagingAndSortingContactRepository
        .findAll(ContactSpecification.findByFirstNmLike(firstNm), pageable);

final Collection<ContactDto> contactDtos = contactPage.getContent()
    .stream()
    .map(this::convertToContactDto)
    .collect(Collectors.toList());
final Page contactPage=分页和排序contactrepository
.findAll(ContactSpecification.findByFirstNmLike(firstNm),可分页);
最终收集contactDtos=contactPage.getContent()
.stream()
.map(此::convertToContactDto)
.collect(Collectors.toList());

但是我剩下的是
集合
而不是
页面
,我不知道如何将
集合
放入
页面
的内容中。有办法做到这一点吗?或者是否有其他方法在
页面
实例本身上调用转换?

结果是
页面
有自己的
.map()
方法,您可以向其传递方法引用以进行转换

final Page<ContactDto> contactDtoPage = contactPage.map(this::convertToContactDto);
下面是我如何完成转换的

final Page<ContactDto> contactDtoPage = contactPage.map(this::convertToContactDto);

在这种情况下,页面转换的迭代执行效率可能会低于整个集合,正如
Page.map(..)
可能会做到的那样

在这种情况下,我们可以使用Spring的
PageExecutionILs
来完成用转换后的内容重建页面的繁杂工作

public Page<TypeB> getPageAsTypeB(Pageable pageable) {
    Page<TypeA> pageA = pagingAndSortingContactRepository(pageable);
    Function<List<TypeA>, List<TypeB>> collectionTransform;

    Page<TypeB> pageB = PageableExecutionUtils.getPage(
        collectionTransform.apply(pageA.getContent()),
        pageable,
        pageA::getTotalElements);
    return pageB;
}
公共页面getPageAsTypeB(可分页){
第pageA页=分页和排序联系人存储库(可分页);
函数集合变换;
Page pageB=PageableExecutionLS.getPage(
collectionTransform.apply(pageA.getContent()),
可分页,
pageA::getTotalElements);
返回pageB;
}

这就成功了。这比创建一个新的页面实例并复制对象要容易得多。@Andrew您能提供一些ConvertToContactd中的代码示例吗?非常有用-比使用投影要容易得多,尤其是使用分页和排序存储功能时更是如此伟大!谢谢。从您的回答中不清楚您从何处获得“pageable”…我更新了示例代码,以表明问题中的
pageable
用于生成预转换
pageA
的存储库查询。谢谢。非常感谢。