【发布时间】:2019-04-10 15:47:08
【问题描述】:
对于这个普通的 sql 查询,我如何使用 Criteria API 进行查询:
SELECT * FROM
documents
WHERE (register_date BETWEEN to_date('02.07.2017', 'DD.MM.YYYY') AND to_date('02.07.2018', 'DD.MM.YYYY'))
OR (sign_date BETWEEN to_date('02.07.2017', 'DD.MM.YYYY') AND to_date('02.07.2018', 'DD.MM.YYYY'));
在 postgres 中?
这不是重复的,因为我正在做一个有两个之间的查询,并且下面链接中的一个问题没有我可以看到的标准 api
我需要做这样的事情
CriteriaBuilder cb = this.getCSession().getCriteriaBuilder();
CriteriaQuery<Documents> documentsCriteria = cb.createQuery(model_class);
Root<Documents> DocumentsRoot = documentsCriteria.from(model_class);
documentsCriteria.select(DocumentsRoot);
List<Predicate> predicates = new ArrayList<>();
if (register_start_date != null && register_end_date != null) {
predicates.add(cb.between(DocumentsRoot.get("register_date"), register_start_date, register_end_date));
predicates.add(cb.between(DocumentsRoot.get("sign_date"), register_start_date, register_end_date));
}
documentsCriteria.where(cb.or(predicates.toArray(new Predicate[predicates.size()])));
List<Order> orderList = new ArrayList<>();
orderList.add(cb.asc(DocumentsRoot.get("register_date")));
orderList.add(cb.asc(DocumentsRoot.get("sign_date")));
documentsCriteria.orderBy(orderList);
Query q = this.getCSession().createQuery(documentsCriteria);
return (List<Documents>) q.getResultList();
【问题讨论】:
-
如果你能展示你的尝试会很棒。有很多类似的问题,例如this。
标签: java jpa criteria-api