После прочтения возможного дублирования и многих других потоков я наткнулся на функцию «RLIKE» в MySQL.Прежде всего, это функция MySQL, и, насколько я знаю, не является частью стандартного JPQL или HQL.Чтобы использовать его, я создал собственный MySQLDialect:
public class CustomMySqlDialect extends MySQLDialect {
public CustomMySqlDialect() {
super();
registerFunction("REGEX_LIKE", new SQLFunctionTemplate(BOOLEAN, "?1 RLIKE (?2)"));
}
}
И это @Query:
@Query("SELECT m FROM Material m WHERE function('REGEX_LIKE', m.productName, :searchTexts) = 1 "
List<Material> findByProductName(@Param("searchTexts") String searchTexts);
В качестве параметра можно использовать строки поиска текста, объединенныетрубы.
List<String> searchTexts = Arrays.asList("abc", "xyz");
String joinedSearchTexts = String.join("|", searchTexts);
List<Material> searchResult = findByProductName(joinedSearchTexts);