Spring 用于比较日期的引导 JPA 规范
Spring Boot JPA Specification for Compare Dates
我需要找到 table 记录,这些记录将出现在用户传递的日期之间。我正在尝试为此编写一个规范,但它显示编译时错误如下:
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)
我已经尝试在各个论坛上进行搜索,但无法找到解决此问题的方法,可能是我做错了什么。请帮我解决这个问题。
规格Class
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;
}
条件Class
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));
因为编译器错误告诉您需要 Expression
.
您可以通过将 criteria.getValue()
替换为 criteriaBuilder.literal(criteria.getValue())
来轻松做到这一点
我需要找到 table 记录,这些记录将出现在用户传递的日期之间。我正在尝试为此编写一个规范,但它显示编译时错误如下:
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)
我已经尝试在各个论坛上进行搜索,但无法找到解决此问题的方法,可能是我做错了什么。请帮我解决这个问题。
规格Class
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;
}
条件Class
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));
因为编译器错误告诉您需要 Expression
.
您可以通过将 criteria.getValue()
替换为 criteriaBuilder.literal(criteria.getValue())