Criteria API找到'NULL'

时间:2013-08-14 18:56:48

标签: jpa null jpql criteria-api

以下是较大的Criteria Query的摘录:

...
Expression literal = builder.literal((String) "%" + value + "%");

List<Predicate> globalPredicate = new ArrayList<>();

globalPredicate.add(builder.equal(subject.get(Subject_.email), literal));

predicates.add(builder.or(globalPredicate.toArray(new Predicate[globalPredicate.size()])));  
...

存在一种情况,我明确要传递null并找到Subject_.email null。我尝试传入null并发现条件API需要nullLiteral()。我尝试在适当的情况下有条件地用nullLiteral()替换 literal ,但后来我什么都没有回复。

创建一个匹配数据库中指定属性的null值的查询的最佳做法是什么?

2 个答案:

答案 0 :(得分:3)

我通常使用Expression#isNull()。使用您的示例:

globalPredicate.add(subject.get(Subject_.email).isNull());

至于这是否被视为“最佳实践”,它在Oracle的Java EE教程40.3.5.1 The Expression Interface Methods中进行了演示。

答案 1 :(得分:-1)

Null或NotNull可以用于下面的criteriaQuery:

// IS [NOT] NULL
    Predicate n1 = cb.isNull(name);
    Predicate n2 = cb.isNotNull(name);

使用此链接作为参考:http://www.objectdb.com/java/jpa/query/jpql/comparison