簡體   English   中英

JPA @Query 與 LIKE 和 UPPER %

[英]JPA @Query with LIKE and UPPER %

我正在嘗試在 JPA hibernate @Repostiory 中運行以下查詢:

@Query(value = "select city, state_code " +
          "from mv_city_state_center " +
          "where upper(city) like upper(:citycriteria)%",
          nativeQuery = true)
List<String> searchCityStateCenter(@Param("citycriteria") String cityCriteria);

特別是like upper(:citycriteria)%的行。

citycriteria是像'pit'這樣的部分字符串,我想首先將其大寫為PIT ,然后將其放在like的語句中,例如。 where upper(city) like PIT% - 例如匹配 PITTSBURGH 和 PITTCARN。

Hibernate 接受like pit%但當upper被混入時,兩者都失敗:

  • like upper(:citycriteria)%
  • like upper(:citycriteria%)

什么是正確的語法? 現在,我確保所有調用者方法都只是通過cityCriteria.toUpperCase()但如果查詢本身處理了這個,那么調用者不必關心它。

我還嘗試了 本指南中的以下內容,但無濟於事。

public interface AuthorRepository extends JpaRepository<Author, Long> {
 
    @Query("FROM Author WHERE UPPER(firstName) LIKE %?#{[0].toUpperCase()}%")
    List<Author> findByFirstNameContainingIgnoreCase(String firstName);
}

您可以嘗試將%與這樣的值連接起來嗎?

@Query(value = "select city, state_code " +
          "from mv_city_state_center " +
          "where upper(city) like upper(:citycriteria) + '%'",
          nativeQuery = true)
List<String> searchCityStateCenter(@Param("citycriteria") String cityCriteria);

這應該可以解決這個問題,理論上像 function 一樣對待鞋面。

1 您正在使用本機查詢,為什么?

2 您返回一個列表,但投影有兩列(城市、州代碼)!

要連接兩個字符串,您可以使用 concat:

@Query(value = "select city, state_code " +
          "from mv_city_state_center " +
          "where upper(city) like upper(concat(:citycriteria, '%'))"
          nativeQuery = true)
List<String[]> searchCityStateCenter(@Param("citycriteria") String cityCriteria);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM