SpringDataJPAのSpecificationの複雑な検索


前言
前回のSpringData-JPAのExampleMatchの例クエリに続いて、ExampleMatchは日付に関する問い合わせが特に悪いので、Specificationクエリの研究ができました.
2018年8月11日:学んだことによって、文章を更新し、Pageasbleのページ順の機能を追加しました.
実現する
対応するRepositoryはJpaSpecification Exectorインターフェースを実現する必要があります.
public interface EventRepository extends JpaRepository<Event, Integer> , JpaSpecificationExecutor<Event>{
SpecificationとControllerの業務ロジック
    @GetMapping("/event/list")
    public ApiReturnObject findAllEvent(String event,Timestamp registerTime,Integer pageNumber,Integer pageSize) {
        if(pageNumber==null) pageNumber=1;
        if(pageSize==null) pageNumber=10;
        //  
        //Pageable   ,PageRequest     ,new PageRequest()    ,PageRequest.of()    
        //PageRequest.of          ,page   ,    0,size        ,       Sort       
        Pageable pageable = PageRequest.of(pageNumber,pageSize,Sort.Direction.DESC,"id");
        //Specification     
        Specification specification=new Specification() {
            private static final long serialVersionUID = 1L;

            @Override
            public Predicate toPredicate(Root root, CriteriaQuery> query, CriteriaBuilder criteriaBuilder) {
                Predicate condition1 = null;
                if(StringUtils.isNotBlank(eventTitle)) {
                    condition1 = criteriaBuilder.like(root.get("eventTitle"),"%"+eventTitle+"%");
                }else {
                    condition1 = criteriaBuilder.like(root.get("eventTitle"),"%%");
                }
                Predicate condition2 = null;
                if(registerTime!=null) {
                    condition2 = criteriaBuilder.greaterThan(root.get("registerTime"), registerTime);
                }else {
                    condition2 = criteriaBuilder.greaterThan(root.get("registerTime"), new Timestamp(1514736000000L));
                }
                //Predicate conditionX=criteriaBuilder.and(condition1,condition2);
                //query.where(conditionX);
                query.where(condition1,condition2);
                //query.where(getPredicates(condition1,condition2)); //             
                return null;  //      JPA API       ,            Predicate Spring Data Jpa,   return null
            }
        };
        Page list=eventRepository.findAll(specification, pageable);

        return ApiReturnUtil.page(list);
    }
Apple ReturnUtil.pageパッケージ
    public static ApiReturnObject page(Page returnObject) {
        return new ApiReturnObject(returnObject.getNumber()+"",returnObject.getNumberOfElements()+"",returnObject.getTotalElements()+"",returnObject.getTotalPages()+"","00","success",returnObject.getContent());  
    }
    String errorCode="00";
    Object errorMessage;
    Object returnObject;
    String pageNumber;
    String pageSize;
    String totalElements;
    String totalPages;

    public ApiReturnObject(String pageNumber,String pageSize,String totalElements,String totalPages,String errorCode, Object errorMessage, Object returnObject) {
        super();
        this.pageNumber = pageNumber;
        this.errorCode = errorCode;
        this.errorMessage = errorMessage;
        this.returnObject = returnObject;
        this.pageSize = pageSize;
        this.totalElements = totalElements;
        this.totalPages = totalPages;
    }
リターンオブジェクトに有用なのは、PageNumber、PageSize、totalElements、totalPagesなどの属性で、パッケージ化が可能です.
{
    "errorCode": "00",
    "errorMessage": "success",
    "pageNumber": "1",
    "pageSize": "2",
    "returnObject": [
        {
            "eventTitle": "1111",
            "id": 3,
            "registerTime": 1528702813000,
            "status": "0"
        },
        {
            "eventTitle": "    ",
            "id": 2,
            "registerTime": 1526268436000,
            "status": "0"
        }
    ],
    "totalElements": "5",
    "totalPages": "3"
}
調べられます.インターネットではこれに関する資料も少ないです.みんなの役に立ちますように.
出会うかもしれないエラー
Unable to locate Attribute  with the the given name [event] on this ManagedType [org.microservice.tcbj.yytsg.checkcentersys.entity.Event]
このような場合は、一般的に本体類にはこの属性がないため、例えば私はEventTitleで、イベントと書いたらエラーが発生します.