如果cb.equal(myClass.get(MyClass_.token), 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())
));
....
}
答案 0 :(得分:1)
做下面的事情。注意我只是文本编辑你的代码,并没有实际检查语法错误或编译它
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);
}