[英]JPA query with CASE WHEN in the WHERE clause. How to do?
如何使用JPA運行如下所示的查詢。 (它適用於純SQL)
SELECT t
FROM table t
WHERE
(
CASE WHEN (( ... subquery ... ) IS NULL)
THEN (t.category IS NULL)
ELSE (t.viewId = :viewId)
END
)
我在IS
遇到MismatchedTokenException
THEN (t.category IS NULL)
可能嗎? 或者我需要重寫這個查詢?
您可以將where子句轉換為:
where
((... my first condition ...) and (something is NULL))
or
(not (... first condition ...) and (something2 = otherthing))
我想你不能這樣做。 閱讀JPQL語法 (這里是OpenJPA提供的)。 以下是定義案例表達式的術語,特別是您正在使用的一般案例表達式:
THEN
右側的表達式必須是scalar_expression
。 這就是說:
我沒有根除所有這些術語的定義,但我認為它們不包括像(t.category IS NULL)
這樣的東西,我很害怕。
您可以從此處下載JPA 2.0規范最終版本: http : //download.oracle.com/otndocs/jcp/persistence-2.0-fr-eval-oth-JSpec/
您應該查看6.5.7節中的 示例6 。 它顯示了如何在Criteria API中使用case-when
。 我不確定,但我認為如果你在WHERE
子句中使用它,可以在THEN
塊中使用邏輯表達式( t.category IS NULL
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.