【问题标题】:Add CriteriaBuilder.between(Date) to Predicate?将 CriteriaBuilder.between(Date) 添加到谓词?
【发布时间】:2017-01-23 12:15:50
【问题描述】:

我是 JPA 的新手

我正在尝试查询我的输入日期值应介于数据库记录的 startDate 和 endDate 之间的表

我正在努力:

List<Predicate> conditionsList = new ArrayList<Predicate>();
conditionsList.add(criteriaBuilder.between(inputDate, root.get("startDate"), root.get("endDate")));

我从Using JPA/Hibernate Criteria to pull between a date找到了以下解决方案:

ParameterExpression<Date> d = criteriaBuilder.parameter(Date.class);
criteriaBuilder.between(d, root.<Date>get("startDate"), root.<Date>get("endDate")); 

但是如何在将 CriteriaBuilder 添加到 Predicate 之前将 Parameterexpression 值设置为 inputDate 变量值?

【问题讨论】:

  • 你能展示你的根类吗?

标签: java hibernate jpa


【解决方案1】:

你可以试试这个方法。

谓词 date = cb.between(root.get("date"), dateBefore, dateAfter); 谓词。添加(日期);

这种方式适用于我的情况。

但对于您的情况(使用 ParameterExpression)。

返回 entityManager.createQuery(query) .setParameter(d, currentDate, TemporalType.DATE).getResultList();

在创建查询时设置参数。 currentDate 是你的约会对象, d 是您之前创建的 ParameterExpression

我更喜欢第一种方式,它对我来说更直观和合乎逻辑。

【讨论】:

    【解决方案2】:

    这样的事情应该可以工作......

    List<Predicate> conditionsList = new ArrayList<Predicate>();
    Predicate onStart = criteriaBuilder.greaterThanOrEqualTo(root.get("startDate"), inputDate);
    Predicate onEnd = criteriaBuilder.lessThanOrEqualTo(root.get("endDate"), inputDate);
    conditionsList.add(onStart);
    conditionsList.add(onEnd);
    criteriaQuery.select(root).where(conditionsList.toArray(new Predicate[]{}));
    

    【讨论】:

    • 谢谢,我想知道 builder.between(date) 是否可以通过 ParameterExpression 或其他方式实现
    • 这不起作用...例如 start_date = 2020 和 end_date = 2022 并且您尝试通过提供输入 2021 使用问题中的查询找到它
    【解决方案3】:

    试试这个:

    criteriaBuilder.between(criteriaBuilder.literal(inputDate),
                            root.<Date>get("startDate"), 
                            root.<Date>get("endDate"));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-28
      • 2011-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-09
      相关资源
      最近更新 更多