使用Blaze Persistence的IsNullPredicate和IsNotNullPredicate来检查参数是否为空。
例如,假设我们有一个实体类Person,包含name和age两个属性:
@Entity public class Person { @Id private Long id;
@Column
private String name;
@Column
private Integer age;
}
我们想查询年龄为null或为20的人:
CriteriaBuilder
cb.or( cb.isNull(root.get("age")), cb.equal(root.get("age"), 20) );
如果我们简单地传递null值作为参数,Blaze Persistence会跳过该参数,导致查询条件不完整。为了避免这种情况,我们必须手动检查参数是否为空:
Integer age = null; cb.or( cb.isNull(root.get("age")), age != null ? cb.equal(root.get("age"), age) : null );
使用IsNullPredicate和IsNotNullPredicate也可以达到同样的效果:
Integer age = null; cb.or( cb.isNull(root.get("age")), cb.or( age != null ? cb.equal(root.get("age"), age) : null, cb.isNull(root.get("age")) ) );