jpql

参考:https://stackoverflow.com/questions/52591535/spring-jpa-no-converter-found-capable-of-converting-from-type

  1. @Component
  2. public interface CrowdReportDAO extends CrudRepository<CrowdReportDO, String> {
  3. @Query(value = "select new com.tianrang.cbd.amc.mock.api.vo.CrowdReportVO(r.channel, r.crowd, sum(r.crowdSize), r.activityName, min(r.activityBeginTime), max(r.activityEndTime), sum(r.uv), c.name) from crowd_report r join crowd c on r.crowd = c.id where channel= '1' group by r.crowd, r.activityName order by min(r.activityBeginTime) desc")
  4. List<CrowdReportVO> getAggregateReport();
  5. }
  6. @Data
  7. @AllArgsConstructor
  8. public class CrowdReportVO {
  9. String channel;
  10. String crowd;
  11. String crowdSize;
  12. String activityName;
  13. String activityBeginTime;
  14. String activityEndTime;
  15. Long uv;
  16. String crowdName;
  17. }
  1. @RestController
  2. @RequestMapping(path = UriName.CROWD_REPORT)
  3. public class CrowdReportController extends BaseController {
  4. @Resource
  5. CrowdReportDAO crowdReportDAO;
  6. @GetMapping
  7. public List<CrowdReportVO> retrieveList(@Valid CrowdReportGetDTO dto) {
  8. return crowdReportDAO.getAggregateReport();
  9. }
  10. }

native query

  1. @Component
  2. public interface CrowdReportDAO extends CrudRepository<CrowdReportDO, String> {
  3. @Query(value = "select channel, crowd, c.name as crowd_name, activity_name, min(activity_begin_time) as activity_begin_time, max(activity_end_time) as activity_end_time, sum(crowd_size) as crowd_size, sum(uv) as uv from crowd_report r join crowd c on r.crowd = c.id where channel= '1' group by crowd, activity_name order by activity_begin_time desc;", nativeQuery = true)
  4. List<CrowdReportVO> getAggregateReport();
  5. }
  6. // 参考https://stackoverflow.com/questions/49500309/spring-jpa-native-query-with-projection-gives-converternotfoundexception
  7. public interface CrowdReportVO {
  8. String getChannel();
  9. String getCrowd();
  10. // 不会自动将下划线格式转为驼峰,需要手动添加注解 https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#projections.interfaces.open
  11. @Value("#{target.crowd_size}")
  12. String getCrowdSize();
  13. @Value("#{target.activity_name}")
  14. String getActivityName();
  15. @Value("#{target.activity_begin_time}")
  16. String getActivityBeginTime();
  17. @Value("#{target.activity_end_time}")
  18. String getActivityEndTime();
  19. Long getUv();
  20. @Value("#{target.crowd_name}")
  21. String getCrowdName();
  22. }
  1. @RestController
  2. @RequestMapping(path = UriName.CROWD_REPORT)
  3. public class CrowdReportController extends BaseController {
  4. @Resource
  5. CrowdReportDAO crowdReportDAO;
  6. @GetMapping
  7. public List<CrowdReportVO> retrieveList(@Valid CrowdReportGetDTO dto) {
  8. return crowdReportDAO.getAggregateReport();
  9. }
  10. }