Параметр в подобном разделе JPQL
Я пытаюсь написать JPQL-запрос с похожим предложением:
LIKE '%:code%'
Я хотел бы иметь код = 4 и найти
455
554
646
...
Я не могу пройти :code = '%value%'
namedQuery.setParameter("%" + this.value + "%");
потому что в другом месте мне нужно :value
, не обернутое символами %
. Любая помощь?
Ответы
Ответ 1
Если вы делаете
LIKE :code
а затем do
namedQuery.setParameter("code", "%" + this.value + "%");
Тогда значение остается свободным от знака "%". Если вам нужно использовать его где-то еще в одном запросе, просто используйте другое имя параметра, кроме "code".
Ответ 2
Я не использую именованные параметры для всех запросов. Например, необычно использовать именованные параметры в JpaRepository.
В обходной путь я использую функцию JPQL CONCAT (этот код эмулирует начало с):
@Repository
public interface BranchRepository extends JpaRepository<Branch, String> {
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<Branch> findByFilialAndBranchLike(String filialId, String branchCode);
}
Я нашел эту технику в отличных документах: http://openjpa.apache.org/builds/1.0.1/apache-openjpa-1.0.1/docs/manual/jpa_overview_query.html
Ответ 3
Вы можете использовать функцию JPA LOCATE.
LOCATE (searchString, candidString [, startIndex]): возвращает первый индекс searchString в кандидатской строке. Позиции основаны на 1. Если строка не найдена, возвращает 0.
К вашему сведению: в документации по моему лучшему хиту Google параметры были изменены.
SELECT
e
FROM
entity e
WHERE
(0 < LOCATE(:searchStr, e.property))
Ответ 4
В API критериев JPA есть хороший метод like(). Попробуйте использовать это, надеюсь, это поможет.
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery criteriaQuery = cb.createQuery(Employees.class);
Root<Employees> rootOfQuery = criteriaQuery.from(Employees.class);
criteriaQuery.select(rootOfQuery).where(cb.like(rootOfQuery.get("firstName"), "H%"));
Ответ 5
Просто оставьте "
LIKE %:code%
Ответ 6
Я не знаю, опоздал ли я или вышел за рамки, но, по моему мнению, я мог бы сделать это так:
String orgName = "anyParamValue";
Query q = em.createQuery("Select O from Organization O where O.orgName LIKE '%:orgName%'");
q.setParameter("orgName", orgName);
Ответ 7
- Используйте ниже JPQL-запрос.
выберите я из Инструктора i, где i.address LIKE CONCAT ('%' ,: address, '%') ");
-
Используйте ниже код критерия для того же:
}