gpt4 book ai didi

spring-boot - 用于比较日期的 Spring Boot JPA 规范

转载 作者:行者123 更新时间:2023-12-02 00:57:45 25 4
gpt4 key购买 nike

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

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() 替换为 criteriaBuilder.literal(criteria.getValue()) 来轻松做到这一点

关于spring-boot - 用于比较日期的 Spring Boot JPA 规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53151003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com