Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring Data - SQL генерируемый в runtime / 6 сообщений из 6, страница 1 из 1
31.10.2018, 14:17
    #39725831
Щиче
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Data - SQL генерируемый в runtime
Дано: некий интерфейс XYZ extends JpaRepository. В нем есть набор запросов с аннотацией @Query, которые автоматически Spring Data генерируются.

А как надо прописать динамический запрос? Только отдельным интерфейсом, где это будет реализовано реализацией явно или все-таки есть какой-то способ указать, что запрос придет во время исполнения?
...
Рейтинг: 0 / 0
31.10.2018, 14:25
    #39725841
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Data - SQL генерируемый в runtime
Щиче,

Неизвестный запрос вернет неизвестно какие данные..
Маппинг и использование неизвестно чего не возможно.
...
Рейтинг: 0 / 0
31.10.2018, 14:54
    #39725863
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Data - SQL генерируемый в runtime
...
Рейтинг: 0 / 0
31.10.2018, 15:56
    #39725941
Щиче
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Data - SQL генерируемый в runtime
llemingCriteriaQuery, Specification ?
https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/

Предыдущий программист сделал как раз по вашему учебнику. Только мне это не нравится в силу разных причин. Самая главная, что это не работает :) Когда вызывают поиск, то любой критерий по отдельности работает. Но если их несколько и есть критерий на exists подзапроса, то где-то в недрах Hibernate рождается невразумительный NullPointerException. Отладчик проходит всю Specification полностью и спотыкается уже при запросе. Ну и выглядит это, скажем так, невразумительно.

Вот кусок кода, который портит многокритериальный запрос:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
            if (searchParams.getClientId() != null) {
                Subquery q = criteriaQuery.subquery(String.class);
                Root attrRoot = q.from(StringAttributeValue.class);
                q.select(attrRoot.get("stringValue"));

                List<Predicate> attrWhere = new ArrayList<>();
                attrWhere.add(builder.equal(attrRoot.get("stringValue"), searchParams.getClientId()));
                attrWhere.add(builder.equal(versionJoin.get("id"), attrRoot.get("documentVersionId")));

                q.where(builder.and(attrWhere.toArray(new Predicate[predicates.size()])));

                predicates.add(builder.and(builder.exists(q)));
            }

         ...
         return builder.and(predicates.toArray(new Predicate[predicates.size()]));


Самое интересное, что запрос с этим тоже работает, если нет других критериев. Сыпется сразу после возврата из метода. Моя задача как раз исправить косяк.

Я хочу написать запрос на Native SQL с заранее определенными полями в select, но динамически меняющиеся условия поиска. Если возможно использовать в Criteria API SQL подзапросы в секции Where - это тоже вариант. Но этого я не нашел в сети. Можно вызвать какие-то SQL функции, но это уже ничем не лучше переписывания на чистом SQL полностью.

Поэтому можно ли иметь динамический native SQL в автогенерируемом классе или надо делать отдельный интерфейс с реализацией?
...
Рейтинг: 0 / 0
31.10.2018, 16:47
    #39725994
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Data - SQL генерируемый в runtime
Щиче, вместо интерфейса XYZ, сделайте класс, имплементите репозиторий, в классе используйте @Autowired jdbctemplate и далее используйте нативные запросы к базе во все поля.
...
Рейтинг: 0 / 0
31.10.2018, 22:24
    #39726184
Щиче
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring Data - SQL генерируемый в runtime
ОзверинЩиче, вместо интерфейса XYZ, сделайте класс, имплементите репозиторий, в классе используйте @Autowired jdbctemplate и далее используйте нативные запросы к базе во все поля.

Спасибо, так и сделаю.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring Data - SQL генерируемый в runtime / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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