2017-06-27 4 views
0

私は春のブートでPaginationで記録されたユーザーによってジョブを検索したいです。春のブートでログインしたユーザーによってジョブを検索

私は、すべてのユーザーのすべてのジョブを取得すると、それはとても

public List<Job> findAll(Pageable pageable) { 

     List<Job> jobs = new ArrayList<>(); 
     for (Job job : paginatedJobRepository.findAll(pageable)) { 

      jobs.add(job); 

     } 
     return jobs; 

    } 

私はページネーションでログインしているユーザーによってすべてのジョブを取得しようとすると、それが正常に動作しないように正常に動作します。私はそれをそうするようにする

public List<Job> findJobByCompany(Pageable pageable) { 
     Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); 

     User user = userService.findByUsername(authentication.getName()); 
     Company userCompany = companyService.findCompany(user); 
     List<Job> jobs = new ArrayList<>(); 
     for (Job job : paginatedJobRepository.findAll(pageable)) { 
      if (job.getCompany().getId() == userCompany.getId()) { 
       jobs.add(job); 

      } 

     } 
     return jobs; 

    } 

問題は、ユーザーがページネーションを持つすべてのデータを取得しないことです。ページネーションは正しいですが、我々はあなたが、クエリでカスタムメソッドを定義することができるだけでページ付けページ5と6 enter image description here

enter image description hereenter image description here

+0

正常に動作しませんでしょうか?例外はありますか?あなたの問題は何ですか? – Patrick

+0

@Patrickは答えに感謝します。投稿を更新しました –

+2

結合を試してみてください。 1つのクエリでこれを達成できますが、代わりに3つの異なるクエリを実行します。また、最後の "findAll"の代わりに、findByCompany_idというメソッドを記述します(あなたのJobエンティティはCompanyエンティティとの関係を持っていると仮定します)。 –

答えて

0

データを見ることができます。このようなもの

1

すべての企業を最初に取得し、不要な結果をフィルタリングして間違ったページ番号を付けます。その代わり、

Page<Job> findByCompany_id(long companyId, Pageable pageable); 

を次のようにあなたのJobRepositoryでメソッドを定義し、この方法は、

select j.* from Job j, Company c where j.companyId = c.id 

このようなクエリを作成します。そして、あなたは正しいページネーションの結果が得られますように、それはまた、このクエリの countを取得します。

+0

お世話になりました。今うまく動作します –

+0

あなたは大歓迎です、私はそれがうれしいです。ジョインには '_'表記を使用することを忘れないでください。それは非常に便利です:) –

0

今はとてもうまく動作します。

リポジトリ

Page<Job> findJobsByCompanyId(Long id, Pageable pageable); 

サービス

public List<Job> findJobByCompany(Pageable pageable) { 
     Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); 
     User user = userService.findByUsername(authentication.getName()); 
     Company userCompany = companyService.findCompany(user); 
     List<Job> jobs = new ArrayList<>(); 
     for (Job job : paginatedJobRepository.findJobsByCompanyId(userCompany.getId(),pageable)) { 

       jobs.add(job); 



     } 
     return jobs; 

    } 
関連する問題