簡體   English   中英

JPA 查詢檢查@Param 集是否為空或 null

[英]JPA query check if @Param set is empty or null

我有一個要運行的復雜 HQL 查詢。 我的參數之一是Set<Integer> ,其結果的有效值

類似於: select * from table t where t.code IN (Set<Integer>)

這很簡單吧? 問題是我希望這個查詢返回所有項目,如果Set<Integer>為空或 null (不需要為空或 null,工作任何一種情況都足夠了)

考慮 JPA 存儲庫方法:

public Page<Table> findAll(@Param("codes") Set<Integer> codes);

我嘗試了幾種方法:

SELECT t FROM table t where :codes IS NULL OR t.code IN (:codes)

運行時錯誤: SQL Error: 1241, SQLState: 21000 (conn=3123) Operand should contain 1 column(s)

SELECT t FROM table t where (:codes) IS EMPTY OR t.code IN (:codes)

spring 甚至無法啟動??? is not mapped ??? is not mapped

SELECT t FROM table t where size((:codes)) = 0 OR t.code IN (:codes)

和許多其他人

是否有一種通用的方法可以進行此檢查並使此查詢在不動態構建查詢的情況下工作?

您應該為此使用Specification ,並使用 JPA 標准 API 有條件地將謂詞添加到 where 子句。 這樣,您的查詢計划將比使用此通用解決方案更好,此外它也不會使用意外工作的東西。 請注意,此查詢SELECT t FROM table t where COALESCE(:codes) IS NULL OR t.code IN (:codes)將不再適用於 ZF8CB4B31358F17FA337CFAE6C2A0A66。

不是最好的答案,但我在 stackoverflow https://stackoverflow.com/a/54035166/5679560上找到了解決方案

解決方案是在 IS NULL 之外簡單地使用 COALESCE,以便它可以處理多個值。

SELECT t FROM table t where COALESCE(:codes) IS NULL OR t.code IN (:codes)

暫無
暫無

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

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