【问题标题】:How to get List<Map<String,Object>> from the result set of Hibernate?如何从 Hibernate 的结果集中获取 List<Map<String,Object>>?
【发布时间】:2020-05-09 15:24:02
【问题描述】:

我正在使用休眠来获得这样的结果,

project_id - 123 , 111 , 134
计数 - 2 , 5 ,6

这是我的道层-

@Query("SELECT project_id,COUNT(*) FROM lead_master WHERE vendor_id = ?1 and source = 'share' group by project_id ")
List<Map<String,Object>> getProjectLead(userId); 

输出 - 我想要映射列表,其中 project_id 应该是键,计数应该是与该键关联的对象。所以它会像 -

123 - 2
111 - 5
134 - 6

【问题讨论】:

  • 这个要么使用List&lt;Object[]&gt;要么使用投影baeldung.com/…
  • 但我想得到一个映射列表,它将是一对项目 id 和计数
  • 即使Object[] 也有相同的信息 project_id 在0 和计数在1 索引

标签: java sql dictionary jpa jpql


【解决方案1】:

您可以为此使用ResultTransformer

(List<Map<String, Object>>) entityManager.createNativeQuery(
    "SELECT project_id, COUNT(*) FROM lead_master WHERE vendor_id = :userId and source = 'share' group by project_id "
)
    .setParameter("userId", userId)
    .unwrap(org.hibernate.query.Query.class)
    .setResultTransformer(
        new ResultTransformer() {
            @Override
            public Object transformTuple(Object[] tuple, String[] aliases) { // 2.
                return new HashMap.of((String) tuple[0], tuple[1]);
            }

            @Override
            public List transformList(List collection) {
                return collection;
            }
        }
    )
    .getResultList();

【讨论】:

    【解决方案2】:

    我只是简单地从 jpa 迭代地图列表,然后获取 project_id、count 的值,然后使用新地图存储键和值。我希望它会对你有所帮助。

    Map<String,Object> map=new HashMap<>();
            List<Map<String, Object>> res = samplerepository.getProjectLead(userId);
            res.forEach(action -> {
                String key = (String) action.get("project_id");
                BigInteger value = (BigInteger) action.get("count");                
                map.put(key, value);
            });
            System.out.println("size : " + map.toString());   
    
            Output will be :: {111=5, 123=2, 134=6}
    

    谢谢,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 2012-03-06
      • 2016-11-26
      相关资源
      最近更新 更多