转换Spring Data JPA Page内容的类型
我正在使用Spring Data JPA,我有一个使用JPASpecificationExecutor
的PagingAndSortingRepository
JPASpecificationExecutor
。 我将Specification
和Pageable
实例传递给此存储库的.findAll()
方法以获取Page
。
但是,我的Contact
实体有很多额外的字段和映射,我不需要在前端。 所以,我有一个只包含必要字段的ContactDto
,我有一个可以从Contact
转换为ContactDto
。
private ContactDto convertToContactDto(Contact contact) { //do the conversion }
如何使用此转换方法将Page
转换为Page
?
我可以获取Page
的内容并像这样进行转换。
final Page contactPage = pagingAndSortingContactRepository .findAll(ContactSpecification.findByFirstNmLike(firstNm), pageable); final Collection contactDtos = contactPage.getContent() .stream() .map(this::convertToContactDto) .collect(Collectors.toList());
但是我留下了Collection
而不是Page
,我不知道如何将该Collection
到Page
的内容中。 有没有办法做到这一点? 或者是否有另一种方法来调用Page
实例本身的转换?
事实certificate, Page
有自己的.map()
方法,您可以传递方法引用来进行转换。
以下是我最终进行转换的方式。
final Page contactDtoPage = contactPage.map(this::convertToContactDto);
convertToContactDto
方法只是创建并返回我想要转换为的类的实例:
private ContactDto convertToContactDto(final Contact contact) { final ContactDto contactDto = new ContactDto(); //get values from contact entity and set them in contactDto //eg contactDto.setContactId(contact.getContactId()); return contactDto; }
可能会出现Page变换效率较低的情况,就像Page.map(..)
可能要做的那样,而不是整个集合。
在这种情况下,我们可以使用Spring的PageExecutionUtils
来完成使用已转换内容重构页面的混乱工作。
public Page getPageAsTypeB(Pageable pageable) { Page pageA = pagingAndSortingContactRepository(pageable); Function, List> collectionTransform; Page pageB = PageableExecutionUtils.getPage( collectionTransform.apply(pageA.getContent()), pageable, pageA::getTotalElements); return pageB; }
- Hibernate + PostgreSQL +网络地址类型(inet,cdir)
- Hibernate和Hibernate JPA之间的区别
- 如何使用Hibernate连接两个表的字段?
- Spring – Autowire java.lang.NoClassDefFoundError
- Spring + Hibernate不会自动打开会话
- 集合中元素的hibernate标准
- JPA的Hibernate查询提示
- java.lang.ClassCastException:java.lang.Class无法强制转换为java.lang.reflect.ParameterizedType
- Hibernate实体autowire