powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблема с запросом
8 сообщений из 8, страница 1 из 1
Проблема с запросом
    #38717049
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему когда делаю:
Код: java
1.
List<Human> findByPhoneContaining(String phoneMask, Pageable pageable);


работает
а когда добавляю
Код: java
1.
List<Human> findByPhoneContainingAndFirstNameContaining(String phoneMask, String nameMask, Pageable pageable);


уже ничего не выдает, как сделать так, чтобы искал по нескольким критериям, чтобы фильтры накладывались
Спасибо
...
Рейтинг: 0 / 0
Проблема с запросом
    #38717058
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделала or, все работает, но начальство сказало никаких or-ов, только and. Можно ли как-то по-другому переписать запрос?
...
Рейтинг: 0 / 0
Проблема с запросом
    #38717063
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дорогая JulT, динамические "фильтры" это большая отдельная тема. И так с наскока она не решеается. Начальство резонно намекает на то что OR и будущие проблемы с производительностью в SQL запросах.

Честно, говоря, не знаю адекватного способа реализовать динамеческий фильтр в Hibernate или JPA API. И тем более в Spring Data, который вы, судя по всему используете.

Знаю следующие варианты:
1) Самый корявый - StingBuilder, который собирает JPQL или SQL запрос.
Код: java
1.
2.
3.
 if(nameParam != null){
   query.add(" AND NAME <> :name");
 }



2) Чуть менее корявый - Criteria API
Код: java
1.
2.
3.
if (!isEmpty(nameParam)){
    c.add(Restrictions.eq("name", nameParam));
}


Код выглядит не фонтан. Зато Hibernate Criteria API умеет очень много всего, ключая подзапросы, без которых в сложных фильтрах, часто никак.

3) Поиск объекта по примеру. Не знаю умеет ли JPA - Hibernate точно умеет. В сущности-примере заполняются только нужные свойства, и хибернейт фильтрует только по ним.
...
Рейтинг: 0 / 0
Проблема с запросом
    #38717276
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczДорогая JulT, динамические "фильтры" это большая отдельная тема. И так с наскока она не решеается. Начальство резонно намекает на то что OR и будущие проблемы с производительностью в SQL запросах.

Честно, говоря, не знаю адекватного способа реализовать динамеческий фильтр в Hibernate или JPA API. И тем более в Spring Data, который вы, судя по всему используете.

Знаю следующие варианты:
1) Самый корявый - StingBuilder, который собирает JPQL или SQL запрос.
Код: java
1.
2.
3.
 if(nameParam != null){
   query.add(" AND NAME <> :name");
 }



2) Чуть менее корявый - Criteria API
Код: java
1.
2.
3.
if (!isEmpty(nameParam)){
    c.add(Restrictions.eq("name", nameParam));
}


Код выглядит не фонтан. Зато Hibernate Criteria API умеет очень много всего, ключая подзапросы, без которых в сложных фильтрах, часто никак.

3) Поиск объекта по примеру. Не знаю умеет ли JPA - Hibernate точно умеет. В сущности-примере заполняются только нужные свойства, и хибернейт фильтрует только по ним.
Спасибо за отклик.
Решила использовать querydsl вместе с spring data
Код: java
1.
2.
3.
QClient q = QClient.client;
Predicate predicate = q.phone.contains(phoneMask).and(q.email.contains(emailMask));
List<Client> clientList = clientRepository.findAll(predicate, new PageRequest(fromPosition, countItems)).getContent();


Когда делаю так:
Код: java
1.
Predicate predicate = q.phone.contains(phoneMask));

- все прекрасно, данные возвращаются
как только ставлю:
Код: java
1.
Predicate predicate = q.phone.contains(phoneMask).and(q.email.contains(emailMask));


возвращается пустой clientList, ну почему-же????
...
Рейтинг: 0 / 0
Проблема с запросом
    #38717287
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данные в таблице:
Код: plaintext
1.
2.
id                email                   phone
17          nat@bla.com	         12345678
21          user@bla.com    	 76030322
Делаю:
Код: java
1.
2.
Predicate predicate = q.phone.contains(phoneMask).and(q.email.contains(emailMask));
List<Client> clientList = clientRepository.findAll(predicate, new PageRequest(fromPosition, countItems)).getContent();


где
Код: java
1.
phoneMask="0322"

, а
Код: java
1.
emailMask="nat"

, fromPosition=0, countItems=4
Почему на выходе выдает только:
Код: java
1.
21          user@bla.com    	 76030322


Очень прошу помощи)
...
Рейтинг: 0 / 0
Проблема с запросом
    #38717289
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulT,

а вы посмотрите сам sql запрос, который получается в результате вашим манипуляций. Например в хибернейте можно настроить его вывод в output. Или создайте переменную типа стринг и присваивайте ей текст запроса и смотрите через дебаг или туда же в output его. Или сразу в дебаге смотрите перепенные и их свойства в процессе выполнения.
...
Рейтинг: 0 / 0
Проблема с запросом
    #38717317
DDiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulT,

Странный способ искать приключения.
Если смущает код с ифом в теле метода, сделайте приватный метод который выполнит всю грязную работу. И будет всё в одну строчку. А то те же яйца вид сбоку, да ещё и не понятно как оно там внутри фурычит.
...
Рейтинг: 0 / 0
Проблема с запросом
    #38717352
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NixicJulT,

а вы посмотрите сам sql запрос, который получается в результате вашим манипуляций. Например в хибернейте можно настроить его вывод в output. Или создайте переменную типа стринг и присваивайте ей текст запроса и смотрите через дебаг или туда же в output его. Или сразу в дебаге смотрите перепенные и их свойства в процессе выполнения.
вот что в консоль выдает:

Код: java
1.
Hibernate: select count(client0_.id) as col_0_0_ from client client0_ where (client0_.email like ? escape '!') and (client0_.phone like ? escape '!') limit ?
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблема с запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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