【问题标题】:"message": "Index: 4, Size: 4",SpringBoot“消息”:“索引:4,大小:4”,Spring Boot
【发布时间】:2021-05-09 16:57:49
【问题描述】:

我有这些方法可以按给定日期从数据库中获取数据,

第一次查询

@Query(nativeQuery=true, value="SELECT COUNT(`user_id`)  FROM `app_user` u LEFT JOIN  `user_etablissement` ue on u.id=ue.user_id WHERE year(u.creatdate_time)= :date GROUP BY `etablissement_id`")
public List<BigInteger> findALLUserBenByyear(@Param("date") String date);

第二次查询

@Query(nativeQuery=true, value="SELECT * FROM `etablissement` WHERE YEAR(creatdate_time)= :date")
public List<Etablissement> findAllEtabname(@Param("date") String date);

控制器方法

@GetMapping(value="/etablissementAa/{annee}")
  public  EtablissementDto EtabDTOA(@PathVariable String annee)
  {
    EtablissementDto a = new EtablissementDto();

    
    List<Etablissement> etabs =  etablissementRepository.findAll() ;
    
    List<String> myList = new ArrayList<>();

        for (int i = 0; i < etabs.size(); i++) {
            
            myList.add(etablissementRepository.findAllEtabname(annee).get(i).getEtabName()) ;
            
        }
                    List<BigInteger> UsersNumb =  userRepository.findALLUserBenByyear(annee) ;
        
        List<BigInteger> myList1 = new ArrayList<>();

            for (int j = 0; j <UsersNumb.size(); j++) {
                
                
                myList1.add((BigInteger) userRepository.findALLUserBenByyear(annee).get(j)) ;
            }       
    a.setEtabNamee(myList);
    a.setUsersNumber(myList1);
    return a;
    
      
  }

当我从邮递员执行我的方法时,它显示了这个错误

"status": 500,
"error": "Internal Server Error",
"message": "Index: 4, Size: 4",

全栈跟踪

2021-05-09 17:55:29.913  INFO 16716 --- [nio-8020-exec-1] o.h.h.i.QueryTranslatorFactoryInitiator  : HHH000397: Using ASTQueryTranslatorFactory
2021-05-09 17:55:29.962 ERROR 16716 --- [nio-8020-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IndexOutOfBoundsException: Index: 4, Size: 4] with root cause

java.lang.IndexOutOfBoundsException: Index: 4, Size: 4
    at java.util.ArrayList.rangeCheck(ArrayList.java:659) ~[na:1.8.0_281]
    at java.util.ArrayList.get(ArrayList.java:435) ~[na:1.8.0_281]
    at org.club.controller.EtablissementController.EtabDTOA(EtablissementController.java:143) ~[classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_281]

【问题讨论】:

  • edit 发帖并添加完整的堆栈跟踪。
  • @Turing85 完成。
  • etabs 是所有Etablissement 的列表。它的大小用于第一个for 循环的条件。在循环中,您将获得特定年份的所有Etablissements 的列表。这个列表很可能小于所有Etablissements 的列表,因此IndexOutOfBoundsException

标签: java mysql spring-boot


【解决方案1】:
myList.add(etablissementRepository.findAllEtabname(annee).get(i).getEtabName()) ;

findAllEtabname(annee) 只会返回包含 annee 的元素。所以这不会与 etab 具有相同的大小。所以你可以在这里使用 get(i)。

您必须创建第三个循环

ArrayList<String> etabNames= etablissementRepository.findAllEtabname(annee);
For(String name : etabNames) ....

【讨论】:

  • 你能详细解释一下第三个循环吗
【解决方案2】:

把你的最后一个循环改成这个,

for (int j = 0; j <UsersNumb.size(); j++) {
                myList1.add((BigInteger) UsersNumb.get(j)) ;
            } 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多