JPA使用Criteria查找日期在开始日期和结束日期之间的实体,该日期可以为null

use*_*192 4 jpa criteria-api

CriteriaBuilder builder = em.getCriteriaBuilder();
    CriteriaQuery cQuery = builder.createQuery();
    Root<AcsTemplateDateJPA> root = cQuery.from(AcsTemplateDateJPA.class);
    ParameterExpression<Date> d = builder.parameter(Date.class);
    cQuery.where(builder.between(d, root.<Date>get("inservicedate"), root.<Date>get("outservicedate"))); 
    Query query = em.createQuery(cQuery.select(root.get("acstemplateid"))).setParameter(d, planDate, TemporalType.DATE);
    List results =query.getResultList(); 
Run Code Online (Sandbox Code Playgroud)

这里的outService日期可以为null(将来无限结束)我如何添加这个条件?

谢谢,

per*_*ssf 11

我会将日期比较分成两个块,并测试是否为outservicedate isNull().就像是:

Predicate startPredicate = builder.greaterThanOrEqualTo(root.<Date>get("inservicedate"), d);
Path<Date> outServiceDate = root.<Date>get("outservicedate");
Predicate endPredicate = builder.or(builder.isNull(outServiceDate), builder.lessThanOrEqualTo(outServiceDate, d));
Predicate finalCondition = builder.and(startPredicate, endPredicate);
Run Code Online (Sandbox Code Playgroud)