Jpa complex query field, paging, sorting
page = page * pageSize;
startTime = startTime + " 00:00:00";
endTime = endTime+ " 23:59:59";
Date startDate = DateUtil.parse(startTime, "yyyy-MM-dd HH:mm:ss");
Date endDate = DateUtil.parse(endTime, "yyyy-MM-dd HH:mm:ss");
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Tuple> query = cb.createTupleQuery();
Root<类> root = query.from(类.class);
query.multiselect(root.get("字段"),cb.max(root.get("字段")),cb.count(root.get("字段")));
List<Predicate> predicates = new ArrayList<>();
predicates.add(cb.equal(root.get("字段"), 参数));
predicates.add(cb.equal(root.get("字段"), 参数));
if (NonUtil.isNotNon(参数)){
predicates.add(cb.equal(root.get("字段"), 参数));
}
if(NonUtil.isNotNon(tagName)){
predicates.add(root.get("字段").in(参数));
}
//如果有时间条件
if (NonUtil.isNotNon(startTime) && NonUtil.isNotNon(endTime)) {
try {
//Date startDate = DateUtil.parse(startTime+" 00:00:00","yyyy-MM-dd HH:mm:ss");
//Date endDate = DateUtil.parse(endTime+" 23:59:59","yyyy-MM-dd HH:mm:ss");
predicates.add(cb.between(root.get("字段"), startDate, endDate));
} catch (Exception e) {
e.printStackTrace();
}
}
predicates.add(cb.or(cb.lessThan(root.get("字段"),root.get("字段")),cb.isNull(root.get("字段"))));
query.groupBy(root.get("字段"));
query.orderBy(cb.desc(cb.max(root.get("字段"))));
query.where(cb.and(predicates.toArray(new Predicate[0])));
List<Tuple> tuples = entityManager.createQuery(query).getResultList();
if (page+pageSize > tuples.size()) {
tuples = tuples.subList(page,tuples.size() );
}else {
tuples = tuples.subList(page, page + pageSize);
}