2015-06-09 3 views
0

У меня есть следующие в моем хранилище Spring данных:выделяющихся значения в Repository Spring Data

@Query("select i from Image i where i.name like %:name% and deleted = false") 
Collection<Image> findByName(@Param("name") String name); 

метод ищет базу данных для записи изображения, чье имя содержит определенную строку - значит «как%: имя%» , Проблема состоит в том, что если имя содержит символ, который является особым для оператора «как» (например, процент или подчеркивание), он не экранируется. Похоже, это связано с аннотацией @Query - без нее все работает так, как ожидалось.

Если бы я имел изображение под названием «мой образ%», и хотел бы найти «Y%», то SQL был бы»... как„% г \ %%“

Мой вопрос ? как мне сделать код автоматически экранировать специальные символы

ответ

1

Я закончил с использованием родного запроса:

@Query(nativeQuery = true, value = "select * from asset where name like concat('%', replace(replace(:name, '%', '\\%'), '_', '\_'), '%')") 
Смежные вопросы