相关疑难解决方法(0)

使用spring-data-jpa和spring-mvc过滤数据库行

我有一个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)

java spring spring-mvc spring-data spring-data-jpa

46
推荐指数
1
解决办法
5万
查看次数

Spring Data - 如果参数为空值,则忽略该参数

我想要一个带有两个参数的spring数据存储库接口.有没有办法让它有以下行为?

MyObject findByParameterOneAndParameterTwo( String parameterOne, String parameterTwo);
Run Code Online (Sandbox Code Playgroud)

如果两个参数都有一个值,我希望它能正常运行并为两个值执行"AND".

例如,如果第二个参数为null,则它仅搜索ParameterOne

有什么建议?

spring spring-data spring-boot

25
推荐指数
5
解决办法
2万
查看次数

JPA Query处理NULL参数值

我是JPA的新手,这是我的一个查询,我有几个参数作为查询的一部分,任何参数都可以是null值

@Query(value = "SELECT ord.purchaseOrderNumber,ord.salesOrderNumber,ord.quoteNumber"

            + " FROM Order ord WHERE ord.purchaseOrderNumber LIKE :poNumber%  "
            + " AND ord.salesOrderNumber LIKE :soNumber "
            + " AND ord.quoteNumber = :quoteNumber "
Run Code Online (Sandbox Code Playgroud)

上面的示例如果我的输入参数:quoteNumber为NULL则我不应该通过ord.quoteNumber = NULL进行过滤,那么如何避免这种情况

jpa

6
推荐指数
2
解决办法
1万
查看次数