2013-02-27 13 views
5

Ho una query denominata JPQL che accetta un parametro List. Sto utilizzando il parametro in un IN frase:È possibile passare e testare un elenco vuoto in JPA?

...WHERE x.id IN :list 

Mi piacerebbe fare qualcosa come il seguente, ma la sintassi a quanto pare non me lo permette:

...WHERE :list IS EMPTY OR x.id IN :list 

neppure:

...WHERE SIZE(:list) = 0 OR x.id IN :list 

È quello che sto cercando di fare impossibile in una query denominata JPA 2.0? So come farlo tramite l'API dei criteri o usando semplici stringhe JPQL.

risposta

-2

Quello che stai cercando di fare nella query sembra non avere senso. Stai tentando di limitare i risultati della query utilizzando lo stato di un parametro. Ma non si confronta questo parametro con nulla nella selezione.

Pensate a questa domanda (che non ha senso):

SELECT * FROM SOMETABLE WHERE :list IS EMPTY 

Quindi penso è necessario verificare se il: elenco è vuoto prima di scegliere tra due diverse interrogazioni:

se :list non è vuoto: ...WHERE x.id IN :list

se :list è vuota: (NO WHERE CLAUSE AT ALL)

+0

Hai ragione, naturalmente. Speravo di spostare il codice condizionale nella query stessa, ma questo non è supportato dal JPN BNF. –

+2

Offrirò nella mia debole difesa che il seguente tipo di SQL (non JPQL) è spesso visto in scenari generati: 'SELECT x FROM y WHERE 1 = 1;' (cioè qualsiasi cosa sta assemblando la clausola 'WHERE' a volte fa in modo che '1 = 1' si trova nella clausola' WHERE', quindi l'assembly dinamico non deve fare il tipo di logica if/then di cui si sta parlando). Detto questo, non penso di poterla fare franca con JPQL. Grazie. –

Problemi correlati