如何在JPA中创建虚假谓词

时间:2011-09-05 10:04:40

标签: java jpa-2.0 criteria-api

有没有办法在JPA中创建伪谓词? 有点像这样:

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

几乎所有CriteriaBuilder的方法都将Expression作为参数。 我也试过这个无济于事:

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

显然它会抛出NPE,但我认为这可能有用,因为根据API文档:

  

coalesce表达式等同于一个case表达式,如果的所有参数都计算为null ,则返回null,否则返回第一个非null参数的值。

2 个答案:

答案 0 :(得分:8)

在Eclipselink 2.4中,

dijunction对我来说不起作用。

cb.isTrue(cb.literal(false))做了什么,就像人们可以得到的那样精确地表示错误。

答案 1 :(得分:7)

我认为disjunction是您正在寻找的。默认情况下它是假的,直到某个真实谓词or为止。