【问题标题】:Spring Boot JPA Specification for Compare Dates比较日期的 Spring Boot JPA 规范
【发布时间】:2018-11-05 08:48:39
【问题描述】:

我需要找到用户通过的日期之间的表记录。我正在尝试为此编写规范,但它显示编译时错误如下:

The method between(Expression<? extends Y>, Expression<? extends Y>, Expression<? extends Y>) 
in the type CriteriaBuilder 
is not applicable for the arguments (Expression<Date>, Object, Object)

我已经尝试在各种论坛上搜索,但无法找到如何解决这个问题,可能是我做错了什么。请帮我解决这个问题。

规范类

public class ScheduleClassSpecification implements Specification<ScheduleClassInformation> {

private SearchCriteria criteria;

@Override
public Predicate toPredicate(Root<ScheduleClassInformation> root,
        CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
    Expression<String> expression;
    Predicate predicate =null;

    if((criteria.getKey().equalsIgnoreCase("student"))){
         expression = root.join("course").join("student").get("student");
         predicate = criteriaBuilder.equal(expression, criteria.getValue());
    }else if(criteria.getKey().equalsIgnoreCase("startDate") || criteria.getKey().equalsIgnoreCase("endDate")){
        predicate = criteriaBuilder.between
                        (root.<Date>get(criteria.getKey()).as(java.util.Date.class), 
                                criteria.getValue(), 
                                criteria.getValue());  // Compile Time Error on this line

    }

    return predicate;
}

标准类

public class SearchCriteria {
    private String key;
    private String operation;
    private Object value;}

从存储库中提取记录的服务

if(!Utility.isNull(Id)){
                idSpec = new ScheduleClassSpecification(new SearchCriteria("Student",":",Id));
            }

            Page<SCOutput>  listreturn = scRepo.findAll(Specification.where(idSpec), SCOutput.class,new PageRequest(0, 100));

【问题讨论】:

  • 您可以尝试将criteria.getValue() 类型转换为Date 吗?

标签: spring-boot jpa spring-data-jpa predicate criteria-api


【解决方案1】:

编译器错误告诉您需要Expression

您可以通过将criteria.getValue() 替换为criteriaBuilder.literal(criteria.getValue()) 轻松做到这一点

【讨论】:

    猜你喜欢
    • 2020-11-23
    • 2018-02-08
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 2010-09-13
    相关资源
    最近更新 更多