我如何将非类型化列表从 entitymanager 查询转换为类型化列表?
how do i cast the untyped list from an entitymanager query to a typed list?
我无法通过流映射将 getResultList()
方法的 List
return 转换为 List<SeedCalendarResultDTO>
。当我收集结果时,收集方法应该 return 一个 Object
而不是 List<SeedCalendarResultDTO>
,我不明白为什么会这样。在文档中我可以读到 getResultList return 是一个未类型化的列表而不是一个对象,那么为什么 collect 方法 return 是一个对象呢?下面是相关的代码片段:
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();
您可以使用 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,因为您不需要执行未经检查的转换。
我无法通过流映射将 getResultList()
方法的 List
return 转换为 List<SeedCalendarResultDTO>
。当我收集结果时,收集方法应该 return 一个 Object
而不是 List<SeedCalendarResultDTO>
,我不明白为什么会这样。在文档中我可以读到 getResultList return 是一个未类型化的列表而不是一个对象,那么为什么 collect 方法 return 是一个对象呢?下面是相关的代码片段:
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();
您可以使用 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,因为您不需要执行未经检查的转换。