как искать со многими как в строке для слова в случайном порядке с SpringData - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть строка "AlphaBetaZeta GammaTheta" (поле таблицы из базы данных MS SQL), и мне нужен поиск с использованием данных Spring со многими одинаковыми и случайным порядком и случайным количеством ключевых слов

I'mпытается выполнить поиск с помощью:

findByLabelContaining(Collection<String> labels)
findByLabelLike(Collection<String> labels)

, но они не работают.

Включить полнотекстовый поиск в базе данных или использовать эластичный режим не могу, только Spring-Data с собственным методом интерфейса или спользовательский jpql-запрос.

SELECT id, label
FROM TABLE10
WHERE label like '%gam%' AND
      label like '%alpha%' AND
      label LIKE '%theta%'

SELECT id, label
FROM TABLE10
WHERE label like '%alpha%' AND
      label like '%theta%'

и более ..

1 Ответ

0 голосов
/ 02 февраля 2019

Используйте собственный собственный запрос:

@Query(value = "SELECT id, label
FROM TABLE10
WHERE label like %?1%", native = true)
  List<User> findByLabel(String a);

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#_using_advanced_like_expressions

Если вам нужно переменное количество аргументов, вам придется написать собственный запрос:

@PersistenceContext
EntityManager entityManager;

@Override
public List<YourClass> findByLabelLike(List<String> labels) {
    String q = "SELECT id, label FROM TABLE10";

    for (String l : labels) {
       // Add where and ORs
    }

    Query query = entityManager.createNativeQuery(q, YourClass.class);
    int i = 0;
    for (String label : labels) {
          query.setParameter(++i, "%"+label+"%");
    }

    return query.getResultList();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...