如果函数的参数为​​空,则排除查询条件

Exclude query condition if argument of function is null

如果 token 为空,是否可以忽略 cb.equal(myClass.get(MyClass_.token), token) 而无需重复查询?如果完全重复查询(只跳过一个条件),我不想把它打包成巨大的。

private MyClass find(String code, String token) {
    CriteriaBuilder cb = entityManager.getCriteriaBuilder();
    CriteriaQuery<MyClass> cq = cb.createQuery(MyClass.class);
    Root<MyClass> myClass = cq.from(MyClass.class);
    cq.select(myClass).where(
            cb.and(cb.equal(myClass.get(MyClass_.code), code),
                    cb.equal(myClass.get(MyClass_.token), token),
                    cb.greaterThan(myClass.get(MyClass_.expirationDate), DateUtils.getTime())
            ));
    ....
}

做如下的事情。请注意,我只是对您的代码进行了文本编辑,并没有实际检查语法错误或编译它

private MyClass find(String code, String token) {
    CriteriaBuilder cb = entityManager.getCriteriaBuilder();
    CriteriaQuery<MyClass> cq = cb.createQuery(MyClass.class);
    Root<MyClass> myClass = cq.from(MyClass.class);
    Predicate predicate = cb.and(
            cb.equal(myClass.get(MyClass_.code), code),
            cb.greaterThan(myClass.get(MyClass_.expirationDate), DateUtils.getTime())
    );
    if (token != null)
        predicate = cb.and(predicate, cb.equal(myClass.get(MyClass_.token), token));

    cq.select(myClass).where(predicate);
}