我是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变量值?
答案 0 :(得分:5)
这样的事情应该有用......
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[]{}));
答案 1 :(得分:5)
你可以这样试试。
Predicate date = cb.between(root.get("date"), dateBefore, dateAfter); predicate.add(date);
这种方式适用于我的情况。
但是对于你的情况(使用ParameterExpression)。
return entityManager.createQuery(query) .setParameter(d, currentDate, TemporalType.DATE).getResultList();
创建查询时,您需要设置参数。
currentDate
是你的约会对象,
d
之前您创建的是 ParameterExpression
。
我更喜欢第一种方式,对我来说更直观和合乎逻辑。
答案 2 :(得分:3)
尝试一下:
criteriaBuilder.between(criteriaBuilder.literal(inputDate),
root.<Date>get("startDate"),
root.<Date>get("endDate"));