Параметр в подобном разделе JPQL

Я пытаюсь написать JPQL-запрос с похожим предложением:

LIKE '%:code%' 

Я хотел бы иметь код = 4 и найти

 455
 554
 646
 ...

Я не могу пройти :code = '%value%'

 namedQuery.setParameter("%" + this.value + "%"); 

потому что в другом месте мне нужно :value не обернуто символами % . Любая помощь?

Если вы это сделаете

 LIKE :code 

и затем

 namedQuery.setParameter("code", "%" + this.value + "%"); 

Тогда значение остается свободным от знака «%». Если вам нужно использовать его где-то еще в одном запросе, просто используйте другое имя параметра, кроме «code».

Я не использую именованные параметры для всех запросов. Например, необычно использовать именованные параметры в JpaRepository .

К обходу я использую функцию JPQL CONCAT (этот код эмулирует начало с ):

 @Repository public interface BranchRepository extends JpaRepository { private static final String QUERY = "select b from Branch b" + " left join b.filial f" + " where f.id = ?1 and b.id like CONCAT(?2, '%')"; @Query(QUERY) List findByFilialAndBranchLike(String filialId, String branchCode); } 

Я нашел эту технику в отличных документах: http://openjpa.apache.org/builds/1.0.1/apache-openjpa-1.0.1/docs/manual/jpa_overview_query.html

Вы можете использовать функцию JPA LOCATE .

LOCATE (searchString, кандидатString [, startIndex]) : возвращает первый индекс searchString в кандидатеString. Позиции основаны на 1. Если строка не найдена, возвращает 0.

FYI: Документация на мой верхний хит Google изменила параметры.

 SELECT e FROM entity e WHERE (0 < LOCATE(:searchStr, e.property)) 

Просто оставьте ”

 LIKE %:code% 

Я не знаю, опаздываю ли я или нет, но, на мой взгляд, я мог бы сделать это так:

 String orgName = "anyParamValue"; Query q = em.createQuery("Select O from Organization O where O.orgName LIKE '%:orgName%'"); q.setParameter("orgName", orgName); 

В API JPA критериев есть хороший метод like (). Попытайтесь использовать это, надеюсь, что это поможет.

 CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery criteriaQuery = cb.createQuery(Employees.class); Root rootOfQuery = criteriaQuery.from(Employees.class); criteriaQuery.select(rootOfQuery).where(cb.like(rootOfQuery.get("firstName"), "H%")); 
  • Как запросить MongoDB с «как»?
  • Interesting Posts

    x86 / x64 CPUID в C #

    Найти, если listA содержит любые элементы, не входящие в списокB

    KSOAP 2 Android с HTTPS

    Как напрямую инициализировать HashMap (буквально)?

    Объекты привязки, определенные в кодировке

    Антивирус в реальном времени в Ubuntu

    Почему конверсия туда и обратно с помощью строки, небезопасной для двойной?

    Как аутентифицировать прокси-сервер при использовании classа HttpClient?

    Регулярное выражение для извлечения текста между квадратными скобками

    Добавление цветового фильтра в Drawable изменяет все кнопки с использованием того же Drawable

    Как заставить NuGet устанавливать / обновлять все пакеты в файле packages.config?

    Как обрабатывать заблокированный буфер обмена и другие странности

    Связывание нескольких ComboBox с одним списком – Проблема: когда я выбираю элемент, все комбинированные поля меняются

    Как настроить маршрутизацию ASP.NET MVC, чтобы скрыть имя controllerа на домашней странице?

    Как установить стиль «Заголовок» в Word 2013?

    Давайте будем гением компьютера.