Spring Data JPA和NULL过滤器,如果Double字段值为null则不返回任何内容

时间:2018-02-12 20:32:32

标签: spring spring-boot spring-data spring-data-jpa

我有一个数据JPA实体,其中包含"价格"键入Double。现在,用户需要能够根据该字段过滤记录(在最小值和最大值之间)。现在问题是,对于某些记录,DB中的值可以为null。我的数据JPA存储库使用本地查询,如"价格BETWEEN:priceFrom AND:priceTo"。现在,如果用户未在过滤条件中指定任何内容,则应返回包括price为null的所有记录。但是,此查询不会返回这些记录。我知道,我可以用查询创建一个新方法"价格IS NULL"并检查我的服务层中的过滤器值,如果未指定任何内容,则调用null版本。但是,我有多个具有相同要求的字段,然后它会导致许多重复的方法需要维护。是否有更好的方法来处理这种情况?

2 个答案:

答案 0 :(得分:1)

由于您使用的是Spring Data JPA - 规格应该为您解决此问题。这是基于JPA Criteria的解决方案。 对于任何复杂的API - 通过非常简单的字段搜索/过滤资源是不够的。查询语言更灵活,允许您精确过滤所需的资源。因此,您应该能够轻松地为NULL编程(在您当前需要的场景中)以及您可能需要的任何其他内容。

这适用于多个字段,易于编码/配置。有一些链接可以让您更深入地了解它

希望这很有用。

答案 1 :(得分:1)

在我看来,你可以指定

(:priceFrom is null and :priceTo is null and price is null)
OR price between :priceFrom and :priceTo

如果输入priceFrompriceTo,则会使用OR的第二部分,否则会选择price为空的记录