【问题标题】:How to do between or between query with Criteria API如何在使用 Criteria API 的查询之间或之间进行操作
【发布时间】: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();

【问题讨论】:

标签: java jpa criteria-api


【解决方案1】:

您根据实体管理器创建标准,然后向其添加中间限制。

Criteria criteria = entityManager.unwrap(Session.class).createCriteria(EntityDao.class);
criteria.add(Restrictions.between("your_date_column", date1, date2));

之间或之间

criteria.add(Restrictions.or(Restrictions.between("your_date_column", date1, date2), Restrictions.between("your_date_column", date3, date4)));

【讨论】:

  • 好的,中间有一个 没关系!如何在两者之间或之间?!
  • 你在限制之间添加多个
  • 如果我在之间创建下一个它将在 AND 之间,但我需要在 OR 之间
  • criteria.add(Restrictions.or(Restrictions.between("your_date_column", new Date(), new Date()), Restrictions.between("your_date_column", new Date(), new Date ())));
  • 我需要在我的文档中添加这样的内容Criteria.where 如果我要进行谓词.add(cb.or(cb.between(DocumentsRoot.get("register_date"), register_start_date, register_end_date), cb.between(DocumentsRoot.get("sign_date"), register_start_date, register_end_date)));与普通sql相比,行数不一样
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-04
  • 1970-01-01
  • 2023-04-08
  • 2018-12-18
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多