【问题标题】:Extract List<Object> result from query in Java / Spring Boot从 Java / Spring Boot 中的查询中提取 List<Object> 结果
【发布时间】:2020-10-09 21:31:47
【问题描述】:

我想在查询中得到结果的值。

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

@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')

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

【问题讨论】:

  • applicationRepository.getApplicationSummaryInfo的实际返回值是多少?这不是List,我可以免费告诉你这么多。
  • 返回对象 [Ljava.lang.Object;@28bf8e6e
  • 你误会了。我知道那是什么,但我想看看那个方法的签名。 public ??? getApplicationSummaryInfo 之间说什么?
  • Application 类是什么。是entity 还是dto
  • @MortezaBandi 实体

标签: java spring list spring-boot classcastexception


【解决方案1】:

也许这会对你有所帮助。

  1. 使用 sql.xml 中提到的字段创建构造函数。 (name,contact_no, email_address,time_submitted,date_due) 在应用程序类中。
  2. 在查询中指定它,例如“select new Application(name,contact_no, email_address,time_submitted,date_due) from Application p where p.application_number like ?1”。
  3. 您将以 Application 对象的形式获得结果,以便您可以访问该对象的字段。

【讨论】:

    【解决方案2】:

    由于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 是给你的。

    如果它解决了问题,请告诉我。

    【讨论】:

      猜你喜欢
      • 2020-03-15
      • 1970-01-01
      • 2020-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-13
      • 2020-07-14
      • 1970-01-01
      相关资源
      最近更新 更多