如何将无类型列表从实体管理器查询转换为类型列表?

问题描述 投票:0回答:1

我无法通过使用流映射将List方法返回的getResultList()转换为List<SeedCalendarResultDTO>。当我收集结果时,收集方法应该返回Object而不是List<SeedCalendarResultDTO>,我不明白为什么会发生这种情况。在文档中,我可以读到getResultList返回一个无类型的List而不是一个对象,那么为什么collect方法返回一个对象呢?下面是相关的代码片段:

    Query query = entityManager.createQuery(queryBuilder.toString());
        Object collect = query.getResultList().stream().map(object -> (SeedCalendarResultDTO) object).collect(Collectors.toList());

我无法将Object collect更改为List collect,因为它会产生编译错误。我不想使用NamedQuery,因为查询字符串是动态构造的。

编辑:由于某种原因这很好,但不受欢迎,因为现在它仍然是一个对象列表。 List<SeedCalendarResultDTO> results = query.getResultList();

java hibernate entitymanager
1个回答
1
投票

您可以使用TypedQuery轻松获取类型列表。

   TypedQuery<SeedCalendarResultDTO> query = em.createQuery(queryBuilder.toString(), SeedCalendarResultDTO,class);
   List<SeedCalendarResultDTO> results = query.getResultList();

但是你的代码也应该有效:

Query query = entityManager.createQuery(queryBuilder.toString());
List<SeedCalendarResultDTO> results = query.getResultList();

我更喜欢TypedQuery,因为您不需要执行未经检查的转换。

© www.soinside.com 2019 - 2024. All rights reserved.