powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Множественная агрегация с использованием JPA в одном запросе
8 сообщений из 8, страница 1 из 1
Множественная агрегация с использованием JPA в одном запросе
    #39639274
Sasha3516
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня есть таблица с элементами которые должны быть посчитаны на основе нескольких критериев

Код: sql
1.
2.
CREATE TABLE Parents(id int, name varchar)
CREATE TABLE Items(id int, parent_id int, field_A int,field_B int)



Теперь я хочу посчитать все элементы у которых field_A=1 и дополнительно все элементы у которых field_A=1 and field_B=2 для всех родителей
В SQL я делаю это например так (можно использовать from (select) )

Код: sql
1.
2.
3.
4.
5.
6.
SELECT p.id, p.name, count1, count2 FROM Parents p
INNER JOIN 
(SELECT count(id) as count1, parent_id FROM Items WHERE field_A=1 GROUP BY parent_id) select1 ON select1.parent_id=p.id
INNER JOIN 
(SELECT count(id) as count2, parent_id FROM Items WHERE field_A=1 AND field_B=2 GROUP BY parent_id)
select2 ON select2.parent_id=p.id



Вопрос в том как подобное имплементировать с использованием JPA в JEE приложении.
В моём понимании sub-queries не подерживаються JPA и я могу это сделать только с использованием native queries.

Данные для теста

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
insert into items(id,parent_id, field_A, field_B) values(1,1,1,1);
insert into items(id,parent_id, field_A, field_B) values(2,1,1,2);
insert into items(id,parent_id, field_A, field_B) values(3,1,2,1);
insert into items(id,parent_id, field_A, field_B) values(4,1,2,2);
insert into items(id,parent_id, field_A, field_B) values(5,2,1,2);
insert into items(id,parent_id, field_A, field_B) values(6,2,1,3);
insert into items(id,parent_id, field_A, field_B) values(7,1,1,3);
insert into items(id,parent_id, field_A, field_B) values(8,2,1,2);
insert into items(id,parent_id, field_A, field_B) values(9,2,1,2);
...
Рейтинг: 0 / 0
Множественная агрегация с использованием JPA в одном запросе
    #39639301
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sasha3516,
ОРМ для CRUD и простого маппинга.
Где у вас первое и второе?
...
Рейтинг: 0 / 0
Множественная агрегация с использованием JPA в одном запросе
    #39639328
Sasha3516
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

Вы хотите сказать ОРМ для подобных задач не применима? Тогда какое решение? использовать nativequery или делать два отдельных запроса через ОРМ и потом в java собирать всё вместе?

Меня интересует как сделать правильно? Потому как данный пример будет использован много раз и если будет выбрана неправильная стратегия ошибок будет очень много
...
Рейтинг: 0 / 0
Множественная агрегация с использованием JPA в одном запросе
    #39639352
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sasha3516....
или делать два отдельных запроса через ОРМ и потом в java собирать всё вместе?

мне кажется это уж совсем как-то криво
IMHO
...
Рейтинг: 0 / 0
Множественная агрегация с использованием JPA в одном запросе
    #39639378
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sasha3516В моём понимании sub-queries не подерживаються JPA
Лолшто? Вы убиваете во мне веру в JPA. Потому что подзапросы в Hibernate Criteria API я использовал лет 7 назад или даже больше.
https://stackoverflow.com/a/4668015
Уверен что JPQL умеет так же.

Но, в целом, я не считаю что CriteriaAPI это панацея. Если какие-то вычисления проще сделать на SQL и они не возвращают какие-то сложные структуры, то делайте на SQL в виде вьюх или функций. И держите рядом со структурой БД. Я не вижу в этом ничего зазорного.

ORM имеет достаточно четкий круг проблем которые он решает
- CRUD
- Многочисленные ассоциации
- Ленивость

Эти 3 штуки это именно то что на SQL делать геморно, а на ORM просто.

Но бывают и другие проблемы, которые проще решать на SQL. И когда SQL проще, то и делать на нем. Единственно что стоит обратить внимание на то что кэши не повлияют на ваше решение.
...
Рейтинг: 0 / 0
Множественная агрегация с использованием JPA в одном запросе
    #39639442
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sasha3516Petro123,

Вы хотите сказать ОРМ для подобных задач не применима? Тогда какое решение? использовать nativequery или делать два отдельных запроса через ОРМ и потом в java собирать всё вместе?

Меня интересует как сделать правильно? Потому как данный пример будет использован много раз и если будет выбрана неправильная стратегия ошибок будет очень много
Нету правильно. Есть компромисс.
Например, у вас Модель - дерево.
А у оракла есть специально для дерева запросы.
Потом у вас jpa а не хибер api.
Значит вы планируете менять базы раз в неделю?
Очень много ньюансов.
...
Рейтинг: 0 / 0
Множественная агрегация с использованием JPA в одном запросе
    #39639450
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sasha3516,
Вот для оракла пример его личного api
Код: java
1.
2.
3.
connect by ....
start with t.parent is null
Order siblings by t.xxxx
...
Рейтинг: 0 / 0
Множественная агрегация с использованием JPA в одном запросе
    #39640530
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sasha3516,

Если не хотите лишних трудностей, то есть @NativeQuery.
В нем делаете запрос любой сложности ;-)
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Множественная агрегация с использованием JPA в одном запросе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]