【问题标题】:how to iterate through JPA response and get values from it如何遍历 JPA 响应并从中获取值
【发布时间】:2021-09-01 07:55:18
【问题描述】:

存储库中的代码是

@Query("select divisionName, count(stundeName)FROM StudentDetails GROUP BY divisionName")
    public List<Object> getDivisionCount();

服务中的代码是

List <Object> countList= studentDetailsRepository.getDivisionCount();

现在我想遍历 countList 和 categories 然后进入不同的类别,我试过这个

for(int i=0;i< countList.size();i++ )
    System.out.println(countList.get(i).getClass().getDeclaredField('count'));

它不工作并给出错误

【问题讨论】:

  • 请分享错误,你的代码的objectif是什么!
  • 报错就加入吧。
  • 为什么返回Object?它应该是一个带有 divisionNamecount 字段的 POJO(也许您必须在查询中为 count(stundeName) 起别名。
  • 它给出 java.lang.NoSuchFieldException:count
  • @loic 我有 StudentDetails 的 pojo 但是当我使用它作为返回类型时它给了我错误:java.lang.ClassCastException: [Ljava.lang.Object;不能转换为 com.stud.studentSystem.model.StudentDetails

标签: java spring-boot jpa


【解决方案1】:

最好在 JPA 响应上使用投影。一种选择是使用基于界面的投影。在您的情况下,查询可能如下所示:

@Query(value = "SELECT s.divisionName AS divisionName, count(s.stundeName) AS stundeName FROM StudentDetails AS s GROUP BY s.divisionName")
public List<StudentDetails> getDivisionCount();

那么你需要创建一个这样的界面:

public interface StudentDetails{
    String getDivisionName();
    String getStundeName();
}

【讨论】:

    【解决方案2】:

    您可以像这样遍历对象列表,并为列表中的每个对象创建一个对象数组,然后显示它:

          for (Object object : countList){
    
            Object[] objArray = (Object[]) object;
            System.out.println((String)objArray[0]); // divisionName
            System.out.println((Integer)objArray[1]); // the count
    
          }
             
    

    【讨论】:

      【解决方案3】:

      在生产级实现中使用 JPAStreamer 即时原始查询。在官方文档jpa_streamer 中阅读更多详细信息。 或者, 条件查询

      【讨论】:

      • 请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。
      • 其他有关 jpaStramer 的详细信息资源,您将通过 Google 或 youtube 获得。喜欢,在 youtube 上,您可以通过 youtube.com/watch?v=uOC97ldNWV0&ab_channel=JavaTechie 获得一些想法
      猜你喜欢
      • 2021-07-21
      • 1970-01-01
      • 2021-11-07
      • 2020-08-25
      • 2021-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-28
      相关资源
      最近更新 更多