以下是较大的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
值的查询的最佳做法是什么?
答案 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