从Java / Spring Boot中的查询中提取List <Object>结果

问题描述

我想在查询获取结果的值。

这是我的查询/存储库文件

@Query("select p.name,p.contact_no,p.email_address,p.time_submitted,p.date_due from Application p where p.application_number like ?1")
List<Application> getApplicationSummaryInfo(String application_number);

服务:

public List<Application> getApplicationSummaryInfo(String application_number);

ServiceImpl:

@Override
public List<Application> getApplicationSummaryInfo(String application_number) {
    return (List<Application>)applicationRepository.getApplicationSummaryInfo(application_number);
}

控制器:

List<Application> app_info = applicationservice.getApplicationSummaryInfo(application_no);

我只知道如何使用foreach在jsp文件中访问此文件。但是我想访问我的控制器文件中的字段。

我尝试这样做:

List<Application> app_info = applicationservice.getApplicationSummaryInfo(application_no);
System.out.println(app_info.get(0));

我得到这个结果:

[Ljava.lang.Object;@28bf8e6e

然后我尝试获取确切的“名称”字段值

List<Application> app_info = applicationservice.getApplicationSummaryInfo(application_no);
System.out.println(app_info.get(0).getName());

但是我得到这个错误

java.lang.classCastException: class [Ljava.lang.Object; cannot be cast to class com.pckg_name.model.Application ([Ljava.lang.Object; is in module java.base of loader 'bootstrap'; com.rtc_insurance.model.Application is in unnamed module of loader 'app')

真的希望你能帮助我。谢谢!

解决方法

可能会帮助您。

  1. 使用sql中提到的字段创建一个构造函数。 (名称,联系方式,电子邮件地址,提交的时间,到期日期)
  2. 在查询中进行指定,例如“从应用程序p中选择新的应用程序(名称,联系人编号,电子邮件地址,提交的时间,日期_到期),其中p.application_number像?1”。
  3. 您将以Application对象的形式获取结果,以便您可以访问该对象的字段。
,

由于Application是实体,而不是:

@Query("select p.name,p.contact_no,p.email_address,p.time_submitted,p.date_due from Application p where p.application_number like ?1")

spring-data-jpa已经为您提供了一种方法:

List<Application> findByApplication_numberContaining(String str);

因此,无需自己创建查询。只需在repository界面中定义上述方法即可。

在那之后,首先请确保您的存储库方法能够按需工作。 然后,如果要遍历JSP页面内的列表,请使用此answer 是给你的。

让我知道它是否解决了问题。