2017-06-27 38 views
0

我想通过Spring Boot中的分页用户查找Job。通过登录用户在Spring Boot中分页查找作业

当我检索所有职位所有用户,它工作正常,像这样

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

尝试使用连接。您可以通过一个查询来实现这一点,但您可以运行三个不同的查询。此外,而不是最后一个“findAll”写一个名为findByCompany_id的方法(我假设你的Job实体与Company实体有关系)并调用它。 –

回答

0

您可以查询定义自定义方法。像这样的东西

public interface JobRepository extends JpaRepository<Job, Long> { 

    @Query(value = "SELECT * FROM Job j join Company c WHERE c.id= ?1", 
    countQuery = "SELECT count(*) FROM jobs j join Company c WHERE c.id= ?1", 
    nativeQuery = false) 
    Page<User> findByCompanyId(Long companyId, Pageable pageable); 
} 
1

您先检索所有公司,然后筛选不必要的结果,并给出错误的分页值。相反,如下

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

此方法将这样

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

创建查询,并将其还检索该查询count,这样你会得到正确的分页结果在您的JobRepository定义的方法。

+0

谢谢你的hellp。现在工作正常 –

+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; 

    } 
相关问题