将 CriteriaBuilder.between(Date) 添加到谓词



我是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"));

最新更新