首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Hibernate 模糊查詢參數化常見陷阱與正確寫法

     編輯:Java 相關知識

錯誤現象

在 HQL 中使用 like 進行模糊查詢時,若將萬用字元 % 直接寫在查詢字串或參數中不當,會導致查詢失敗或語法錯誤。

正確寫法

// HQL
from Project o where 1=1 and o.isDeleted = ? and o.prjName like ?

// 參數綁定
query.setString(i, "%" + 實際查詢條件 + "%");

關鍵細節

  • 參數值兩側直接加 %,不需單引號:"%" + keyword + "%"。這與原生 SQL 不同(SQL 需 '%keyword%')。
  • HQL 中欄位名用實體屬性名(o.prjName),非資料庫欄位名(PRJ_NAME)。

易混淆對照表

最佳實踐

  1. 永遠使用參數綁定(setString/setParameter),防止 SQL 注入並利用查詢計畫快取。
  2. 萬用字元在 Java 端拼裝:"%" + keyword + "%"。
  3. 若需轉義 %、_,可用 escape 關鍵字或在 Java 端預處理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
寫法說明
from Project o where o.PRJ_NAME like '%strCond%'錯誤:PRJ_NAME 應為實體屬性名
from Project o where o.prjName like '%strCond%'正確:屬性名,但不建議將參數內嵌在 HQL 字串
from Project o where o.prjName like '?'錯誤:'?' 被視為字面字串,非參數佔位符
from Project o where o.prjName like ?正確:? 為參數佔位符,setString 會自動加單引號