Java JPA.SQL принимает '_' неправильно с LIKE - PullRequest
0 голосов
/ 30 ноября 2018

Я использую Spring Data JPA Query для получения результатов поиска из базы данных. Я ищу результаты по имени или описанию (это столбцы в моей таблице).

    List<MyClass>  findByNameIgnoreCaseContainingOrDescriptionIgnoreCaseContaining(String name, String description);

И вот проблема, когда пользователь пытается найти что-то, содержащее специальные символы (например, «Книга (_, #,% и т. Д.)»).В этом случае JPA строит SQL-запрос с использованием LIKE, в котором вместо критериев поиска принимается подчеркивание или другой специальный символ, такой как часть шаблона LIKE.Как я могу избежать этого?

PS Я использую MySQL

1 Ответ

0 голосов
/ 30 ноября 2018

Я не совсем уверен, как это работает в данных Spring, и, возможно, есть более чистый способ, но вы можете защитить эти символы перед передачей их в запрос.

Например:

String name = name.replace("_", "\\_");
String description = description.replace("_", "\\_");

и затем позвоните findByNameIgnoreCaseContainingOrDescriptionIgnoreCaseContaining(name, description).

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