springdatajpa,pageable将自己的规范添加到自定义查询中

7d7tgy0s  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(258)

我有个问题。我尝试用时间戳中的日期过滤来进行自定义查询,但我使用pageable,它在逗号id desc limit之后添加到查询中,并导致如下错误。我不知道如何解决这个问题。

  1. select * from lights Where timestamp BETWEEN ? AND ? ORDER BY id LIMIT 999999, id desc limit ?
  2. 2021-03-05 15:49:59.545 TRACE 896 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [VARCHAR] - ['2021-03-04 15:27:07']
  3. 2021-03-05 15:49:59.545 TRACE 896 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder : binding parameter [2] as [VARCHAR] - ['2999-12-31 23:59:59']
  4. 2021-03-05 15:49:59.556 WARN 896 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 1064, SQLState: 42000
  5. 2021-03-05 15:49:59.556 ERROR 896 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'desc limit 300' at line 1

自定义查询

  1. @Query(nativeQuery = true, value = "select * from lights Where timestamp BETWEEN :startDate AND :endDate ORDER BY id LIMIT 999999")
  2. Page<Lights> findBetweenDates(@Param("startDate") String startDate, @Param("endDate") String endDate, Pageable pageable);

conrtoller类

  1. @GetMapping("/lights")
  2. public String viewHomePage(Model model, String startDate , String endDate) {
  3. startDate = "'2021-03-04 15:27:07'";
  4. endDate = "'2999-12-31 23:59:59'";
  5. return findPaginated(1, "id", "desc",startDate,endDate, model);
  6. }
  7. @RequestMapping({"/lights/page/{pageNo}"})
  8. public String findPaginated(@PathVariable(value = "pageNo") int pageNo,
  9. @RequestParam("sortField" ) String sortField,
  10. @RequestParam("sortDir") String sortDir,
  11. @RequestParam(value = "startDate", defaultValue = "'2021-03-04 15:27:07'") String startDate,
  12. @RequestParam(value = "endDate", defaultValue = "'2999-12-31 23:59:59'") String endDate,
  13. Model model){
  14. int pageSize = 200;
  15. Page<Lights> page = lightsMapService.findPaginated(pageNo,pageSize,sortField,sortDir,startDate,endDate);
  16. List<Lights> lightsList = page.getContent();
  17. model.addAttribute("currentPage", pageNo );
  18. model.addAttribute("totalPages", page.getTotalPages());
  19. model.addAttribute("totalItems",page.getTotalElements() );
  20. model.addAttribute("sortField", sortField );
  21. model.addAttribute("sortDir", sortDir );
  22. model.addAttribute("startDate",startDate);
  23. model.addAttribute("endDate", endDate);
  24. model.addAttribute("reverseSortDir", sortDir.equals("asc")?"desc":"asc");
  25. model.addAttribute("lightsList", lightsList );
  26. return "sensorsPages/lights";
  27. }

从查询中删除limit99999后,我没有得到错误enymore,但得到了这个结果,并且它不起作用:

  1. 2021-03-05 16:09:47.789 DEBUG 3540 --- [nio-8080-exec-7] org.hibernate.SQL : select * from lights Where timestamp BETWEEN ? AND ? ORDER BY id, id desc limit ?
  2. 2021-03-05 16:09:47.789 TRACE 3540 --- [nio-8080-exec-7] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [VARCHAR] - ['2021-03-04 15:27:07']
  3. 2021-03-05 16:09:47.789 TRACE 3540 --- [nio-8080-exec-7] o.h.type.descriptor.sql.BasicBinder : binding parameter [2] as [VARCHAR] - ['2999-12-31 23:59:59']

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题