为了账号安全,请及时绑定邮箱和手机立即绑定

如何从Spring Data JPA GROUP BY查询返回自定义对象

如何从Spring Data JPA GROUP BY查询返回自定义对象

达令说 2019-10-15 16:06:36
我正在使用Spring Data JPA开发Spring Boot应用程序。我正在使用自定义JPQL查询来按某个字段分组并获取计数。以下是我的存储库方法。@Query(value = "select count(v) as cnt, v.answer from Survey v group by v.answer")public List<?> findSurveyCount();它正在工作,结果如下:[  [1, "a1"],  [2, "a2"]]我想得到这样的东西:[  { "cnt":1, "answer":"a1" },  { "cnt":2, "answer":"a2" }]我该如何实现?
查看完整描述

4 回答

?
慕娘1492219

TA贡献1条经验 获得超1个赞

/*
* @Query的sql使用原生sql语句
* findSurveyCount()的返回值使用Map<String,Object>
*/

@Query(value = "select count(v) as cnt, v.answer from Survey v group by v.answer",
        nativeQuery=true)
public List<Map<String,Object>> findSurveyCount();


查看完整回答
1 反对 回复 2021-05-16
?
互换的青春

TA贡献1797条经验 获得超6个赞

此SQL查询返回List <Object []>将。


您可以这样操作:


 @RestController

 @RequestMapping("/survey")

 public class SurveyController {


   @Autowired

   private SurveyRepository surveyRepository;


     @RequestMapping(value = "/find", method =  RequestMethod.GET)

     public Map<Long,String> findSurvey(){

       List<Object[]> result = surveyRepository.findSurveyCount();

       Map<Long,String> map = null;

       if(result != null && !result.isEmpty()){

          map = new HashMap<Long,String>();

          for (Object[] object : result) {

            map.put(((Long)object[0]),object[1]);

          }

       }

     return map;

     }

 }


查看完整回答
反对 回复 2019-10-15
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

使用接口,您可以获得更简单的代码。无需创建和手动调用构造函数


第1步:使用必填字段声明界面:


public interface SurveyAnswerStatistics {


  String getAnswer();

  Long getCnt();


}

步骤2:在接口中选择与getter名称相同的列,并从存储库方法返回intefrace:


public interface SurveyRepository extends CrudRepository<Survey, Long> {


    @Query("select v.answer as answer, count(v) as cnt " +

           "from Survey v " +

           "group by v.answer")

    List<SurveyAnswerStatistics> findSurveyCount();


}


查看完整回答
反对 回复 2019-10-15
  • 4 回答
  • 0 关注
  • 8181 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信