在 HQL 中使用 like 進行模糊查詢時,若將萬用字元 % 直接寫在查詢字串或參數中不當,會導致查詢失敗或語法錯誤。
// HQL
from Project o where 1=1 and o.isDeleted = ? and o.prjName like ?
// 參數綁定
query.setString(i, "%" + 實際查詢條件 + "%");
%,不需單引號:"%" + keyword + "%"。這與原生 SQL 不同(SQL 需 '%keyword%')。o.prjName),非資料庫欄位名(PRJ_NAME)。| 寫法 | 說明 |
|---|---|
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 會自動加單引號 |