powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / SQL -> Criteria API
12 сообщений из 12, страница 1 из 1
SQL -> Criteria API
    #39710960
Фотография Щиче
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дано:

SQL:
Код: plsql
1.
2.
select * from document d
join document_version v on d.id=v.document_id and v.version_number=(select max(version_number) from document_version where document_id=d.id)



Загвоздка в подзапросе. Как его можно выразить в Criteria API JPA?
...
Рейтинг: 0 / 0
SQL -> Criteria API
    #39710968
Фотография Щиче
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил проблему, не нужен ответ. Если интересно:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
 
Subquery subQuery = criteriaQuery.subquery(Integer.class);
Root root2 = subQuery.from(DocumentVersion.class);
subQuery.select(builder.max(root2.get("versionNumber")));
subQuery.where(builder.and(builder.equal(root.get("id"), root2.get("documentId"))));

Join<DocumentVersion, Document> verJoin = root.join("versions", JoinType.INNER);
predicates.add(builder.equal(verJoin.get("versionNumber"), subQuery));
...
Рейтинг: 0 / 0
SQL -> Criteria API
    #39711029
cossack5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щиче,

Criteria Api - еще тот изврат. Напоминает .NET Expression API, где для выражения простой операции, вроде чтения свойства объекта, нужно написать 5 (или больше) строчек кода.
...
Рейтинг: 0 / 0
SQL -> Criteria API
    #39711342
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cossack5Щиче,

Criteria Api - еще тот изврат. Напоминает .NET Expression API, где для выражения простой операции, вроде чтения свойства объекта, нужно написать 5 (или больше) строчек кода.
то что выглядит как гамно это точно:

Код: java
1.
2.
3.
4.
5.
6.
                Subquery<String> whateverSubquery = query.subquery(String.class);
                Root<SomeEntity> herRoot = mySoeEntitySubquery.from(SomeEntity.class);

                mySomeEntitySubquery.select(herRoot.get("baseItemEntity").get("id"));
                mySomeEntitySubquery.where(cb.equal(herRoot.get("user").get("id"), getCurrentUser()));
                Predicate someEntities = root.get("id").in(mySomeEntitySubquery);



я видел и копался в спеках размером с дом. т.е. 400-500 строк легко. это какой то навоз. ощущение что ты шел по полю и вступил в навозную кучу и топчешь ее топчешь )) особенно когда надо что то там подрихтовать и добавить функционала. того кто это придумал надо из рогатки убивать еще в детстве.
...
Рейтинг: 0 / 0
SQL -> Criteria API
    #39711349
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрите https://www.jooq.org/
...
Рейтинг: 0 / 0
SQL -> Criteria API
    #39711355
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, жук клёвый. если у тебя до жука ничего нет ))
...
Рейтинг: 0 / 0
SQL -> Criteria API
    #39711493
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTя видел и копался в спеках размером с дом. т.е. 400-500 строк легко. это какой то навоз. ощущение что ты шел по полю и вступил в навозную кучу и топчешь ее топчешь )) особенно когда надо что то там подрихтовать и добавить функционала. того кто это придумал надо из рогатки убивать еще в детстве.
Несколько вопросов

Во сколько этажей получился сгенерованный sql ?
Чем лучше многоэтажка criteria пртив многоэтажки чистого sql?

Хотя конешно читаемость у sql получше будет.
...
Рейтинг: 0 / 0
SQL -> Criteria API
    #39711523
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
llemingЧем лучше многоэтажка criteria пртив многоэтажки чистого sql?

Хотя конешно читаемость у sql получше будет.для "чистого sql" есть гуи которые позволяют более наглядно оперировать с таблицами, связями, что позволяет значительно ускорить отладку.
...
Рейтинг: 0 / 0
SQL -> Criteria API
    #39711550
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
llemingandreykaTя видел и копался в спеках размером с дом. т.е. 400-500 строк легко. это какой то навоз. ощущение что ты шел по полю и вступил в навозную кучу и топчешь ее топчешь )) особенно когда надо что то там подрихтовать и добавить функционала. того кто это придумал надо из рогатки убивать еще в детстве.
Несколько вопросов

Во сколько этажей получился сгенерованный sql ?
Чем лучше многоэтажка criteria пртив многоэтажки чистого sql?

Хотя конешно читаемость у sql получше будет.
читаемость лучше у того к чему ты больше привык. когда у тебя стрингой формируется многоэтажный запрос это тоже выглядит не айс.
плюс критериев в том что ты используя джаву и все ее плюшки можешь сконструировать в принципе любой сложности запрос, ты можешь сделать метод и передавать в него какие то параметры по кондишенам которых ты что то делаешь или не делаешь, ты можешь создать целую фабрику которая тебе будет выплевывать готовый критерий который ты следом передаешь репозиторию
и тд и тп. то что сложные критерии выглядят малочитаемыми, и вообще лютым пипцом - это да.

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

у меня например, в нескольких проектах была тема где любой твоя спецификация безусловно аппендился с дургой спецификацией, которая отсекает результаты, которые тебе видеть не надо.

я смутно представляю как это сделать с голым скуэлом на той же спрингдате.
...
Рейтинг: 0 / 0
SQL -> Criteria API
    #39712259
Фотография Щиче
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для меня Criteria API - то что не должно существовать в нашем мире. Но так как есть на работе люди его уважающие - иногда дешевле дописать их этажерку, чем писать нормальный SQL.
...
Рейтинг: 0 / 0
SQL -> Criteria API
    #39712290
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT ...плюс критериев в том что ты используя джаву и все ее плюшки можешь сконструировать в принципе любой сложности запрос

как сделать на criteria что нибудь такое

select * from (values($1), ($2), ($3)....($n)) as t(natural_id) left join person p using(natural_id) where p.natural_id is null;

Нужно из списка параметров переданных в запрос вернуть те для которых нет совопставления в таблице Бд
...
Рейтинг: 0 / 0
SQL -> Criteria API
    #39712395
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я сейчас прям вот так вот не напишу, надо в исходники лезть, но то что в скобках это сабквери, он есть. вернуть то чего нет ну ... у критериев есть иквал, нот иквал, налл и ин. ну рут.джоин тоже есть. лефт райт какой угодно. вроде как всего хватает.
в конце концов, ты можешь воркэраундом написать хранимку в скле и прям внаглую ее из критерий апи вызвать ))
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / SQL -> Criteria API
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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