Я использую руководство на https://www.baeldung.com/rest-api-search-language-rsql-fiql для построения спецификации JPA на основе R SQL.
Предложение like выглядит следующим образом:
return builder.like(root.get(property), argument.toString().replace('*', '%'));
Мой вопрос: как лучше всего обрабатывать экранирование специальных символов при вводе пользователем?
Например, если пользователь предоставил строку:
*my-search%-term*
приведенный выше код перевел бы это на:
%my-search%-term%
Я бы хотел экранировать %
в строке, чтобы он не оценивался как подстановочный знак %
в предложении LIKE.
В следующем посте указаны специальные символы LIKE для каждой базы данных:
Список специальных символов для предложения SQL LIKE
, а также примечание комментарий из одного из ответов:
Невозможно написать независимый от СУБД код здесь, потому что вы не знаете, какие символы вы должны будете экранировать, а стандарт говорит, что вы не можете избегать вещей, которые не нужно избегать. (См. Раздел 8.5 / Общие правила / 3.a.ii.)
Мне интересно, как лучше всего справиться с этим? Я использую postgres в производстве и h2 в тестировании, но в идеале не хочу, чтобы решение было привязано ни к одному из них.