【问题标题】:how do i cast the untyped list from an entitymanager query to a typed list?如何将实体管理器查询中的无类型列表转换为类型列表?
【发布时间】:2018-09-18 10:23:43
【问题描述】:

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

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】:

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

    【讨论】:

    • 小注:虽然createQuerycreateNamedQuery 返回一个TypedQuery 接口,但createNativeQuery 不作为JPA 要求这样做,但在Hibernate 5.X 中它确实如此,您可以使用类型转换来做到这一点。
    猜你喜欢
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 2018-06-13
    • 2010-12-02
    • 1970-01-01
    相关资源
    最近更新 更多