, nativeQuery = true. В MySQL вам, вероятно, потребуется обработать набор терминов, прежде чем он будет передан в запрос, чтобы вы могли сгенерировать что-то вроде
... text LIKE '%A%B%C%
Таким образом, ваш пример кода может стать:
Page<Example> findTweetsNotParsed(Set<String> likeTerms, Pageable pageable) {
return executeTweetsNotParsed(String.join("%", likeTerms),pageable)
}
@Query("SELECT t FROM table t WHERE t.text LIKE :setOfTerms")
Page<Example> executeTweetsNotParsedQuery(@Param("setOfTerms")String likeQuery, Pageable pageable);
Для случая ИЛИ вам нужно использовать REGEXP. Что-то вроде:
Page<Example> findTweetsNotParsed(Set<String> likeTerms, Pageable pageable) {
String regex = ".*"+String.join(".*|.*", likeTerms)+".*";
return executeTweetsNotParsed(regex, pageable)
}
@Query(value = "SELECT t FROM table t WHERE t.text REGEXP (:setOfTerms)", nativeQuery=true)
Page<Example> executeTweetsNotParsedQuery(@Param("setOfTerms")String likeQuery, Pageable pageable);
Я не проверял регулярное выражение, но если он чистый, он должен быть примерно таким, чтобы вы получили запрос типа
... text REGEXP '.*A.*|.*B.*|.*C.*"
Возможно, вам придется создать код регулярного выражения для ваших конкретных потребностей.
Кроме того, вы можете добиться того же в Postgres, используя оператор SIMILAR TO.