我是JPA的新手
我正在尝试查询一个表,其中我的输入日期值应该在数据库记录的开始日期和结束日期之间
我正在尝试:
List<Predicate> conditionsList = new ArrayList<Predicate>();
conditionsList.add(criteriaBuilder.between(inputDate, root.get("startDate"), root.get("endDate")));
我从使用 JPA/Hibernate 标准在日期之间拉动中找到了以下解决方案:
ParameterExpression<Date> d = criteriaBuilder.parameter(Date.class);
criteriaBuilder.between(d, root.<Date>get("startDate"), root.<Date>get("endDate"));
但是,在将条件生成器添加到谓词之前,如何将参数表达式值设置为输入日期变量值?
你可以试试这种方式。
谓词日期 = cb.between(root.get("date"), dateBefore, dateAfter); 谓词.添加(日期);
这种方式适用于我的情况。
但对于您的情况(使用参数表达式)。
返回实体管理器.创建查询(查询) .setParameter(d, currentDate, TemporalType.DATE).getResultList();
创建查询时,请设置参数。 currentDate
是你的约会, d
是您之前创建的ParameterExpression
。
我更喜欢第一种方式,它对我来说更直观和合乎逻辑。
这样的事情应该可以工作...
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[]{}));
试试这个:
criteriaBuilder.between(criteriaBuilder.literal(inputDate),
root.<Date>get("startDate"),
root.<Date>get("endDate"));