【问题标题】:How to get results as List<Map<String, Object>> using CriteriaQuery?如何使用 CriteriaQuery 将结果作为 List<Map<String, Object>> 获得?
【发布时间】:2018-09-15 01:37:36
【问题描述】:

我有大约 50 列的大桌子,客户将决定他想要哪些列。基于此,我需要提供数据。

使用 javax.persistence.Query,我可以选择特定的列,如下所示:

String query = "Select new map (dataId as dataId, dataNumber as dataNumber) From Data";
Query q = entityManager.createQuery(query).setMaxResults(10);
List<Map<String, Object>> dataList = q.getResultList();

我想用 CriteriaQuery 实现相同的功能,我尝试如下:

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Data> cQuery = cb.createQuery(Data.class);
Root<Data> c = cQuery.from(Data.class);
cQuery.multiselect(c.get("dataId"), c.get("dataName"));
List<Data> t = entityManager.createQuery(cQuery).setMaxResults(10).getResultList();

对于上面的代码,它的预期构造函数是“Data(dataId, dataName)”。

我想要一种方法来使用 CriteriaQuery 从表中查询特定字段,而无需为选定字段编写构造函数。 请帮我解决这个问题。

【问题讨论】:

  • 你不能。结束。在 Java 中将数据按摩到该表单中
  • @DN1 对不起,我没有得到你。 "用 Java 将数据按摩到该表单中"
  • @DN1 所以你的意思是说我需要使用上面描述的 javax.persistence.Query 的方法?
  • 您发布的 JPQL 毫无意义;您说“map”类中有一个带有 2 个参数的构造函数。没有(假设你的意思是 java.util.Map)
  • @DN1 没有为 JPQL 编写构造函数。我们只需要指定“新地图()”。它会给我们 List>。 JSON 示例:[ { "dataId": 11674217, "dataNumber": "1004436" }, { "dataId": 11674218, "dataNumber": "1004437" } ]

标签: hibernate jpa spring-data-jpa criteria-api


【解决方案1】:

正如Hibernate User Guide 中所述,在本例中使用maplist 进行动态实例化是HQL 中的附加功能,而不是JPQL 的一部分。

Criteria API 不提供构造此类选择的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 2015-11-21
    • 2020-05-09
    • 1970-01-01
    相关资源
    最近更新 更多