Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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
Spring 如何在JPA中创建日期规范以查找较大/较小的日期等?_Spring_Database_Jpa - Fatal编程技术网

Spring 如何在JPA中创建日期规范以查找较大/较小的日期等?

Spring 如何在JPA中创建日期规范以查找较大/较小的日期等?,spring,database,jpa,Spring,Database,Jpa,我有一个Maria数据库,其中一个表的列名为registed什么是时间戳。我想制定规范,查找日期之前/之后的记录。我有这个: 公共类GreaterThanDate实现规范{ 私人临时搜索标准; public GreaterThanDate(SearchCriteria SearchCriteria){ 标准=搜索标准; } @凌驾 公共谓词toPredicate(根根、CriteriaQuery查询、CriteriaBuilder){ 试一试{ SimpleDataFormat格式化程序=新的S

我有一个Maria数据库,其中一个表的列名为
registed
什么是时间戳。我想制定规范,查找日期之前/之后的记录。我有这个:

公共类GreaterThanDate实现规范{
私人临时搜索标准;
public GreaterThanDate(SearchCriteria SearchCriteria){
标准=搜索标准;
}
@凌驾
公共谓词toPredicate(根根、CriteriaQuery查询、CriteriaBuilder){
试一试{
SimpleDataFormat格式化程序=新的SimpleDataFormat(“yyyy-MM-dd'HH:MM:ss.SSSXXX”);
返回builder.greaterThanOrEqualTo(root.get(criteria.getKey()),formatter.parse(criteria.getValue().toString());
}捕获(解析异常){
System.out.println(e.getMessage());
}
}
}
公共类搜索标准{
私钥;
私人客体价值;
}
这是在我的数据库中找到的日期:
2020-09-01 08:00:00.000000
。如果我试图找到这些记录,我会得到一个
java.lang.IllegalArgumentException
。我这样称呼它:

SearchCriteria=newsearchCriteria(“已注册”,“2020-09-01 08:00:00.000000”);
GreaterThanDate规范=新的GreaterThanDate(标准);
findAll(规范,可分页);
异常为java.lang.IllegalArgumentException:无效筛选器 参数。在sun.reflect.NativeMethodAccessorImpl.invoke0(本机 方法)在sun.reflect.NativeMethodAccessorImpl.invoke(未知 源)位于sun.reflect.DelegatingMethodAccessorImpl.invoke(未知 位于java.lang.reflect.Method.invoke(未知源代码)的 org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) 在 org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) 在 org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105) 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878) 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792) 在 org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) 在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) 在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) 在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) 在 org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) 位于javax.servlet.http.HttpServlet.service(HttpServlet.java:626) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) 位于javax.servlet.http.HttpServlet.service(HttpServlet.java:733) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.springframework.web.filter.AbstractRequestLoggingFilter.doFilterInternal(AbstractRequestLoggingFilter.java:289) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) 在 org.apache.catalina.valves.ErrorReportValve。
@Entity
public class User {
    private ZonedDateTime registered;
}
 } catch (ParseException e) {
            System.out.println(e.getMessage());
        }
package stackoverflowdatespec

import lombok.*;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.context.event.EventListener;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.support.JpaRepositoryImplementation;
import org.springframework.stereotype.Component;

import javax.persistence.*;
import javax.persistence.criteria.*;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

@SpringBootApplication
public class StackOverFlowDateSpecApp {
    public static void main(String[] args) {
        SpringApplication.run(StackOverFlowDateSpecApp.class, args);
    }
}

@Entity
@Data
@ToString
class A {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    protected Long id;

    private ZonedDateTime registered = ZonedDateTime.now();
}

interface ARepo extends JpaRepositoryImplementation<A, Long> {
}

@Component
@RequiredArgsConstructor
class Init {
    final ARepo repo;
    @EventListener
    public void init(ContextRefreshedEvent evt) {
        repo.save(new A());
        System.out.println(repo.findAll());

        SearchCriteria criteria = new SearchCriteria("registered", "2011-12-03T10:15:30+01:00");
        System.out.println(repo.findAll(new GreaterThanDate(criteria), Pageable.unpaged()).getContent());
    }
}

@RequiredArgsConstructor
class GreaterThanDate implements Specification<A> {
    private final SearchCriteria criteria;
    @Override
    public Predicate toPredicate(Root<A> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder builder) {
        ZonedDateTime before = ZonedDateTime.parse(criteria.getValue(), DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX"));
        return builder.greaterThanOrEqualTo(root.get(criteria.getKey()), before);

    }
}

@Data
@AllArgsConstructor
class SearchCriteria {
    private String key;
    private String value;
}