当前位置: 首页 > 知识库问答 >
问题:

如果参数在Spring Data JPA中为空,则忽略条件

严正初
2023-03-14

我目前正在开发我的项目的搜索和过滤功能。我正在尝试使用此请求主体检索数据:

{
    "researchers": [
        "Jhon Doe"
    ],
    "unit": null,
    "agency":null,
    "date": null,
    "status": null,
    "budget": null
}

下面是从ReasearchRepository检索此数据的方法:


    @Query("select r from Research r " +
            "left join r.fundingAgencies fundingAgencies " +
            "left join r.researchers researchers " +
            "where (:budgetStart is null or :budgetEnd is null or  r.budget between :budgetStart and :budgetEnd )" +
            "and (:startDate is null or r.startDate >= :startDate) " +
            "and (:endDate is null or r.endDate <= :endDate) " +
            "and (:agencyNames is null or fundingAgencies.agencyName in :agencyNames) " +
            "and (:unitNames is null or r.deliveryUnit.unitName in :unitNames )" +
            "and (:names is null or researchers.name in :names ) " +
            "and (:researchStatuses is null or r.researchStatus in :researchStatuses)")
    List<Research> findAdvanced( @Param("budgetStart") Double budgetStart,
                                 @Param("budgetEnd")  Double budgetEnd,
                                 @Param("startDate")  LocalDate startDate,
                                 @Param("endDate") LocalDate endDate,
                                 @Param("agencyNames") Collection<String> agencyNames,
                                 @Param("unitNames") Collection<String> unitNames,
                                 @Param("names") Collection<String> names,
                                 @Param("researchStatuses") Collection<ResearchStatus> researchStatuses);

我的问题是,当我试图从请求中的给定值中查找数据时,它返回一个空列表[],即使它存在于数据库中。我想要实现的是,如果参数为null,它将忽略查询中的特定条件,并且仍将返回数据。

我刚看完贝尔东的那篇文章。

我还找到了另一篇关于使用Criteria API的文章,但要理解这一点需要很多时间。我的项目有点仓促。

蒂亚

共有1个答案

麻超
2023-03-14

我似乎是一个使用规范的好案例。

https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/

 类似资料:
  • 问题内容: 我想要一个带有两个参数的spring数据存储库接口。有没有办法使其具有以下行为? 如果两个参数都有一个值,我希望它正常运行并对两个值都执行“与”运算。 例如,如果第二个参数为null,则它将仅按ParameterOne搜索 有什么建议么? 问题答案: 我不知道这是可能的仓库方法命名,但你可以使用像

  • 我想要一个spring数据存储库接口,它采用两个参数。有没有办法使其具有以下行为? 如果这两个参数都有一个值,我希望它正常运行,并对这两个值执行“and”。 例如,如果第二个参数为null,则它将仅按ParameterOne进行搜索 有什么建议吗?

  • 问题内容: 我有一个存储过程,可根据4个参数从表中获取信息。 我想基于参数获取值,但是如果参数为NULL,则不会检查该参数。因此,如果所有4个参数都为null,则将显示整个表。 这是我的SP(如您所见,这仅适用于1个参数atm): 有什么方法可以做到, 而 不必为每种可能的组合都加一个(15个IF)? 问题答案: 怎么样 在这种情况下,您可能还使用了 但总的来说,您可以尝试类似

  • 说我有下面的JPA方法: 用户通过输入字段和选择字段过滤这些对象的列表,从而调用此方法: 在这种情况下,如果用户不使用该字段进行搜索,则布尔值可以是true、false或null。看起来JPA实际上是在搜索一个空值,而我希望它忽略任何空值。我已经能够使用以下代码进行此组合搜索: 这是可行的,但显然,在一个有8个搜索选项的页面上,这将成为一场噩梦。字符串参数没有这个问题,因为当用户不选择过滤器时,它

  • 在我的flutter应用程序中,我导入了flutter库。然而,这个库目前不支持flutter Web。图书馆不是我的应用程序使用的必要条件。 主要问题:是否有任何方法来检查导入的库是否不受支持,然后在这种情况下我可以删除部分UI和代码?

  • 问题内容: 我正在寻找一种创建忽略空格的学说查询的方法。我尝试用replace,但是我一直都收到 预期的已知功能,得到“替换” 我的查询看起来像: 问题答案: 好的,我编写了一个替换DQL函数。 接下来在app / config.yml中,我添加: 最后,我在控制器中创建了一个DQL查询: 最有趣的是,“引号”非常重要。这意味着您可以在select,from,setParameter和orderB