【问题标题】:JPQL query not working for case insensitive parameters [duplicate]JPQL 查询不适用于不区分大小写的参数 [重复]
【发布时间】:2020-05-25 11:23:25
【问题描述】:

我正在尝试编写一个 JPQL 查询来搜索基于字符串的数据。当我尝试使用“C”搜索数据时,它工作正常,但它不适用于“c”,下面是查询。例如:以下查询适用于 Cat、College、Collapse,但不适用于 cat、College、Collapse。感谢您的帮助。

@Query("select ca.company_01 from CompanyAddress_02 ca WHERE ca.statusActiveSwitch = 'Y' AND ca.country.region.regionCode = :regionCode")
    Page<Company_01> findAllCompany_01Region(@Param("regionCode") String regionCode,  Pageable pageRequest);

【问题讨论】:

标签: java database postgresql jpql case-insensitive


【解决方案1】:

一种方法是在您的 JPQL 查询中进行比较时,将区域代码的两边都小写:

@Query("SELECT ca.company_01 FROM CompanyAddress_02 ca WHERE ca.statusActiveSwitch = 'Y' AND LOWER(ca.country.region.regionCode) = LOWER(:regionCode)")
Page<Company_01> findAllCompany_01Region(@Param("regionCode") String regionCode,  Pageable pageRequest);

请注意,如果您的区域代码中的 case 没有任何用途,请考虑将其全部存储在一个 case 中,例如小写,然后确保您传递给后端的内容也始终相同。这避免了调用LOWER(),这使得WHERE 子句不可分割(即它不能使用索引)。

【讨论】:

    猜你喜欢
    • 2013-03-24
    • 2016-09-07
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    相关资源
    最近更新 更多