簡體   English   中英

Spring 使用可選空值和不區分大小寫的查詢

[英]Spring Query with optional nulls and case insensitive

我正在使用 Spring Boot 2.2.5.RELEASE 和 Java 8 和 PostgreSQL,我需要從表中檢索一些數據。 為此,我可以接收一些可選值,它們需要區分大小寫(主要是因為其中一些是十六進制字符串)。 為了處理這個問題,我使用了一個帶有查詢的 CRUD 存儲庫,如下例所示:

@Repository
public interface MyRepository extends CrudRepository<MyStuff, String> {

    @Query("SELECT s FROM Stuff s WHERE (:name is null or upper(s.name) = upper(:name)) "
            + "and (:age is null or upper(s.age) = upper(:age)) "
            + "and (:status is null or upper(s.status) = upper(:status))")
    List<MyStuff> findStuff(@Param("name") String name,
                            @Param("age") String age,
                            @Param("status") String status);

我已經刪除了一些信息以使其清楚,但它的要點就在那里。 問題是,只有一個字段必須有值,其他字段可以是 null。 它應該很簡單,因為我在將字段轉換為大寫之前檢查了 null,但是當我嘗試運行它時出現錯誤,因為 null 值被解釋為bytea ,因此沒有方法可以更改其案子。 如果沒有 java 中的方法來檢查空值並在 Java 端更改為大寫,我該如何處理它?

我不建議你這樣做。 遇到類似情況時,DBMS 將使用相當保守的查詢計划。 對於這樣的條件過濾器,您應該使用 Spring-Data 規范。

暫無
暫無

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

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