java - 如何将实体管理器查询中的非类型化列表转换为类型化列表?

标签 java hibernate entitymanager

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

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

我无法将对象收集更改为列表收集,因为它会产生编译错误。我也不想使用 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,因为您不需要执行未经检查的转换。

关于java - 如何将实体管理器查询中的非类型化列表转换为类型化列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52384413/

相关文章:

java - 如何使用 Hibernate 映射 Java 泛型实例

java - 如何使用 JPA 和 hibernate 映射 Java/Kotlin 字符串数组和 Postgres SQL 数组

java - 如何使用 hibernate JPA 注释连接两列

hibernate - 选择给定数据时防止刷新 EntityManager

java - JPA,实体管理器,选择多列并获取结果列表自定义对象

java - 比较java中二维数组中的值

java - Scala:Trait Companion Object 在 Java 中不可见

orm - 如何在 EntityManager (JPA) L1 或 L2 缓存大小中设置限制

java - Cordova 3.5 android 文件插件中的 NullPointer 异常

java - 将 PrintStream 转换为 PrintWriter