Число JPA (*) с использованием CriteriaBuilder. Как использовать CriteriaBuilder для извлечения столбца count (*) - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть вопрос о CriteriaBuilder API:

Я хотел бы посчитать результаты столбца с возвратом результата этого подсчета и списка различных значений этого столбца.

|      Table_fruit       |     count(Table_fruit)    |
|------------------------|---------------------------|
|          apple         |         (5)               |
|          orange        |         (20)              |
|          banana        |         (400)             |     

Итак, я хочу сделать запрос, который будет выполнять эту инструкцию SQL:

select distinct COLUMN_NAME_1, count(COLUMN_NAME_1)
from TABLE_NAME
where COLUMN_NAME_2= 'value'
group by COLUMN_NAME_1;
    CriteriaBuilder cb = getCriteriaBuilder();
    CriteriaQuery<Fruit> cq = cb.createQuery(Fruit.class);

    Root<TABLE_NAME> root = cq.from(Fruit.class);

    List<Predicate> predicates = new ArrayList<>();
    predicates.add(cb.equal(root.get("COLUMN_NAME_2"), value));
    cq.where(predicates.toArray(new Predicate[predicates.size()]));

    // how to select the COUNT(*) from the table here? 


    cq.select(root.get("COLUMN_NAME_1")).distinct(true);

    cq.groupBy(root.get("COLUMN_NAME_1"));

Итак, мой вопрос: как извлечь два значения из запроса в Java

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

попробуйте

cq.multiselect(root.get("COLUMN_NAME_1"), cb.count(root.get("COLUMN_NAME_1"));
// add your predicates here
cq.groupBy(root.get("COLUMN_NAME_1"));
0 голосов
/ 07 ноября 2018

1) Измените универсальный на: CriteriaQuery<Object[]> cq = cb.createQuery(Object[]);

2) Изменить выбор: cq.select(cb.count(root), root.get("COLUMN_NAME_1"))

3) Повтор списка результатов:

List<Object[]> results = em.createQuery(cq).getResultList();
for (Object[] result : results) {
   // actions
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...