fir*_*ter 3 java hibernate jpa
我是JPA的新手
我试图查询一个表,我的输入日期值应该在数据库记录的startDate和endDate之间
我想做:
List<Predicate> conditionsList = new ArrayList<Predicate>();
conditionsList.add(criteriaBuilder.between(inputDate, root.get("startDate"), root.get("endDate")));
Run Code Online (Sandbox Code Playgroud)
我发现以下解决方案来自于使用JPA/Hibernate Criteria来介绍日期:
ParameterExpression<Date> d = criteriaBuilder.parameter(Date.class);
criteriaBuilder.between(d, root.<Date>get("startDate"), root.<Date>get("endDate"));
Run Code Online (Sandbox Code Playgroud)
但是如何在将CriteriaBuilder添加到Predicate之前将Parameterexpression值设置为inputDate变量值?
像这样的东西应该工作......
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[]{}));
Run Code Online (Sandbox Code Playgroud)
小智 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
你之前创造的.
我更喜欢第一种方式,它对我来说更直观和合乎逻辑.
尝试这个:
criteriaBuilder.between(criteriaBuilder.literal(inputDate),
root.<Date>get("startDate"),
root.<Date>get("endDate"));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20184 次 |
最近记录: |