我有一个spring-mvc项目,它使用spring-data-jpa进行数据访问.我有一个域对象Travel,我想让最终用户对它应用一些过滤器.
为此,我实现了以下控制器:
@Autowired
private TravelRepository travelRep;
@RequestMapping("/search")
public ModelAndView search(
@RequestParam(required= false, defaultValue="") String lastName,
Pageable pageable) {
ModelAndView mav = new ModelAndView("travels/list");
Page<Travel> travels = travelRep.findByLastNameLike("%"+lastName+"%", pageable);
PageWrapper<Travel> page = new PageWrapper<Travel>(travels, "/search");
mav.addObject("page", page);
mav.addObject("lastName", lastName);
return mav;
}
Run Code Online (Sandbox Code Playgroud)
这很好用:用户有一个带有lastName输入框的表单,可以用来过滤旅行.
除了lastName之外,我的Travel域对象还有很多我想要过滤的属性.我认为如果这些属性都是字符串,那么我可以将它们添加为@RequestParams并添加一个spring-data-jpa方法来进行查询.例如,我添加了一个方法findByLastNameLikeAndFirstNameLikeAndShipNameLike.
但是,当我需要过滤外键时,我不知道该怎么做.所以我Travel有一个period属性是Period域对象的外键,我需要将它作为下拉列表供用户选择Period.
我想要做的是当句点为空时我想要检索由lastName过滤的所有旅行,当句点不为空时我想要检索由lastName过滤的这段时间的所有旅行.
我知道如果我在我的存储库中实现两个方法并使用一个if到我的控制器,这可以做到:
public ModelAndView search(
@RequestParam(required= false, defaultValue="") String lastName,
@RequestParam(required= false, defaultValue=null) Period period,
Pageable …Run Code Online (Sandbox Code Playgroud)