Spring + boot + data - 具有关联返回页面的示例查询

时间:2017-05-27 15:25:07

标签: java spring spring-boot spring-data query-by-example

我有一个Employee实体类,其中映射了Job实体。在控制器中,我想返回所有具有给定作业描述的作业的员工。我是怎么做到的目前我的代码返回空列表。

这是我的代码

public class Employee {
  public int id;
  public String name;

  @ManyToOne()
  @JoinColumn(name="JOB_ID", referencedColumnName="JOB_ID")
  public Job job;
  ...
}
public class Job {
  public int jobId;
  public String desc; // job description
  ...
}

@Controller
public MyController {
  // I want to filter employees when given Job desc property

  @RequestMapping("/filter")
    public ModelAndView filterBy(
        @ModelAttribute("emp") Employee emp, 
    Pageable pageable, ModelMap model) {

        ExampleMatcher matcher = ExampleMatcher.matching()
                .withMatcher("name", match -> match.startsWith().ignoreCase());

        Example<Employee> example = Example.of(emp, matcher);
        Page<Employee> employeePage = employeeRepository.findAll(emp, 
                new PageRequest(pageable.getPageNumber(), 
                pageable.getPageSize(), null));

        PageWrapper<Employee> page = new PageWrapper<Employee>(employeePage, "/employee");

        model.addAttribute("employee", empPage.getContent());
        model.addAttribute("page", page);

        return new ModelAndView("employeePage", model);
    }
}

感谢您的建议。

2 个答案:

答案 0 :(得分:1)

很抱歉没有评论的声誉,所以将此作为答案发布

正如@JB Nizet建议在你的JPA Repository中为你的方法添加一个@Query,即employeeRepository

例如定义一个方法(方法名称可以是任何东西)

strict

答案 1 :(得分:0)

我已经解决了这个问题。通过示例的查询工作正常它只是一个实体属性不能为null所以我不得不添加忽略它。

.withIgnorePaths("job.property") <-- ignore property which is not null