Как получить список > Из результирующего набора Hibernate? - PullRequest
2 голосов
/ 23 января 2020

Я использую hibernate, чтобы получить такой результат,

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); 

Вывод - я хочу список карты, где ключ_проекта должен быть ключом, а счетчик должен быть объектом, связанным с этим ключом. Поэтому он будет выглядеть как -

123 - 2
111 - 5
134 - 6

Ответы [ 2 ]

1 голос
/ 23 января 2020

Вы можете использовать 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();
0 голосов
/ 24 января 2020

Я просто перебрал список карт из jpa, затем получил значения project_id, посчитал, а затем сохранил ключ и значения, используя новую карту. Надеюсь, это поможет вам.

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}

Спасибо,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...