代码之家  ›  专栏  ›  技术社区  ›  Maurice

如何将非类型化列表从entitymanager查询转换为类型化列表?

  •  0
  • Maurice  · 技术社区  · 7 年前

    我转不动方向盘 List getResultList() List<SeedCalendarResultDTO> 通过与流的映射。当我收集结果时,collect方法应该返回一个 Object 而不是 列出<种子日历结果到> 我不明白为什么会这样。在文档中我可以看到getResultList返回一个非类型化列表而不是对象,那么为什么collect方法返回一个对象呢?以下是相关代码片段:

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

    我无法将Object collect更改为List collect,因为它创建了一个编译错误。我也不想使用NamedQuery,因为查询字符串是动态构造的。

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Tom    7 年前

    您可以使用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,因为您不需要执行未选中的转换。