2011-09-05 80 views
3

是否有任何方法在JPA中創建虛假謂語? 排序是這樣的:如何在JPA中創建虛假謂語JPA

CriteriaBuilder cb = em.getCriteriaBuilder; 
Predicate pred = cb.isTrue(false); 

幾乎所有的CriteriaBuilder的方法都表達作爲參數。 我也試過這個無濟於事:

Expression<Object> path = cb.coalesce.value(null); 
Predicate pred = cb.isNotNull(path); 

顯然它拋出NPE,不過,我認爲這可能會奏效,因爲根據API文檔:

一個COALESCE表達式相當於一個CASE表達式如果的所有參數的計算結果爲空,則返回null,否則返回其第一個非空參數的值。

回答

7

我認爲disjunction是你在找什麼。它默認是錯誤的,直到一些真實的謂詞是or編輯它。

+1

是的,disjunction似乎正是我需要的。從未與他們合作過。非常感謝! – jFrenetic

+0

像JPA 2.0中的魅力工作與休眠4 –

5

dijunction在Eclipselink 2.4中對於更復雜的查詢不起作用。

什麼是cb.isTrue(cb.literal(false))這是作爲一個虛假的精確表示可以得到。

+0

感謝您分享您的解決方案。 4年後,人們仍然在尋找:)非常奇怪的是,我測試了@JB Nizet在EclipseLink上提出的解決方案,並且它工作正常。但那是很久以前的事了。 – jFrenetic