2015-10-07 10 views
16

私はSpring Data JPAを使用しており、JPASpecificationExecutor<Contact>を使用するPagingAndSortingRepository<Contact, Long>があります。このリポジトリの.findAll()メソッドにSpecificationPageableインスタンスを渡して、Page<Contact>を取得します。Springデータの変換タイプJPAページコンテンツ

しかし、私のContactエンティティには、フロントエンドには必要のない多くの余分なフィールドとマッピングがあります。だから、私はContactDtoには必要なフィールドだけが含まれており、ContactからContactDtoに変換できるメソッドがあります。私はPage<ContactDto>Page<Contact>を変換するには、この変換方法を使用しに行くかどう

private ContactDto convertToContactDto(Contact contact) { 
    //do the conversion 
} 

Page<Contact>の内容を取得して、このような変換を行うことができます。

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

final Collection<ContactDto> contactDtos = contactPage.getContent() 
    .stream() 
    .map(this::convertToContactDto) 
    .collect(Collectors.toList()); 

しかし、その後、私はPageの代わりにCollectionが残っています、と私はPageの内容にそのCollectionを取得する方法がわかりません。これを行う方法はありますか?または、Page<Contact>インスタンス自体でコンバージョンを呼び出す別の方法がありますか?

答えて

30

Pageには、独自の.map()メソッドがあります。このメソッドには、変換を行うためのメソッド参照を渡すことができます。

ここで私は変換を行った方法です。

final Page<ContactDto> 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 
    //e.g. contactDto.setContactId(contact.getContactId()); 
    return contactDto; 
} 
+0

これはトリックをしました。新しいPageインスタンスを作成してオブジェクトをコピーするよりはるかに簡単です。 –

+0

@Andrew convertToContactDtoのコードのサンプルをいくつか含めることができますか? –

関連する問題