如果函数的参数为空,则排除查询条件
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);
}
如果 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);
}