Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA使用条件查找日期介于开始日期和结束日期之间且可以为空的实体 CriteriaBuilder=em.getCriteriaBuilder(); CriteriaQuery cQuery=builder.createQuery(); Root=cQuery.from(AcsTemplateDateJPA.class); ParameterExpression d=builder.parameter(Date.class); cQuery.where(builder.between(d,root.get(“inservicedate”)、root.get(“outservicedate”)); Query Query=em.createQuery(cQuery.select(root.get(“acstemplateid”))).setParameter(d,planDate,TemporalType.DATE); List results=query.getResultList();_Jpa_Criteria Api - Fatal编程技术网

JPA使用条件查找日期介于开始日期和结束日期之间且可以为空的实体 CriteriaBuilder=em.getCriteriaBuilder(); CriteriaQuery cQuery=builder.createQuery(); Root=cQuery.from(AcsTemplateDateJPA.class); ParameterExpression d=builder.parameter(Date.class); cQuery.where(builder.between(d,root.get(“inservicedate”)、root.get(“outservicedate”)); Query Query=em.createQuery(cQuery.select(root.get(“acstemplateid”))).setParameter(d,planDate,TemporalType.DATE); List results=query.getResultList();

JPA使用条件查找日期介于开始日期和结束日期之间且可以为空的实体 CriteriaBuilder=em.getCriteriaBuilder(); CriteriaQuery cQuery=builder.createQuery(); Root=cQuery.from(AcsTemplateDateJPA.class); ParameterExpression d=builder.parameter(Date.class); cQuery.where(builder.between(d,root.get(“inservicedate”)、root.get(“outservicedate”)); Query Query=em.createQuery(cQuery.select(root.get(“acstemplateid”))).setParameter(d,planDate,TemporalType.DATE); List results=query.getResultList();,jpa,criteria-api,Jpa,Criteria Api,此处outService日期可以为空(结束时间无限长) 如何添加此条件 谢谢,我会将日期比较分为两个块,并测试是否超出服务时间。比如: CriteriaBuilder builder = em.getCriteriaBuilder(); CriteriaQuery cQuery = builder.createQuery(); Root<AcsTemplateDateJPA> root = cQuery.from(AcsTemplateDateJPA.class);

此处outService日期可以为空(结束时间无限长) 如何添加此条件


谢谢,

我会将日期比较分为两个块,并测试
是否超出服务时间。比如:

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(); 
谓词startPredicate=builder.greaterThanOrEqualTo(root.get(“inservicedate”),d);
路径outServiceDate=root.get(“outServiceDate”);
谓词endPredicate=builder.or(builder.isNull(outServiceDate),builder.lessThanOrEqualTo(outServiceDate,d));
谓词finalCondition=builder.and(startPredicate,endPredicate);

这应该是不言自明的:

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);
@覆盖
公共谓词toPredicate(根根、标准查询、,
标准生成器(cb)
{
//谓词validFrom-该列应包含null或小于validityDate的值
谓词validFrom=cb.or(root.get(OrganizationCommission\uz.validFrom).isNull(),
cb.lessThanOrEqualTo(
root.get(OrganizationCommission_u.validFrom),
缬二酸酐);
//谓词validTo-该列应包含null或大于validityDate的值
谓词validTo=cb.or(root.get(OrganizationCommission_uz.validTo).isNull(),
cb.greaterThanOrEqualTo(root.get(OrganizationCommission_u.validTo)),
缬二酸酐);
谓词=cb.conjunction();
predicate.getExpressions().add(cb.and(validFrom,validTo));
返回谓词;
}
                @Override
                public Predicate toPredicate( Root<OrganizationCommission> root, CriteriaQuery<?> query,
                                              CriteriaBuilder cb )
                {
                    // The predicate validFrom - the column should contains null or values less than validityDate
                    Predicate validFrom = cb.or( root.get( OrganizationCommission_.validFrom ).isNull(),
                                                 cb.lessThanOrEqualTo(
                                                         root.get( OrganizationCommission_.validFrom ),
                                                         validityDate ) );
                    // The predicate validTo - the column should contains null or values greater than validityDate
                    Predicate validTo = cb.or( root.get( OrganizationCommission_.validTo ).isNull(),
                                               cb.greaterThanOrEqualTo( root.get( OrganizationCommission_.validTo ),
                                                                        validityDate ) );
                    Predicate predicate = cb.conjunction();
                    predicate.getExpressions().add( cb.and( validFrom, validTo ) );
                    return predicate;
                }