유사 절 JPQL의 매개 변수
like 절을 사용하여 JPQL 쿼리를 작성하려고합니다.
LIKE '%:code%'
나는 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<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
JPA LOCATE 함수를 사용할 수 있습니다 .
LOCATE (searchString, 후보 문자열 [, startIndex]) : 후보 문자열에서 검색 문자열의 첫 번째 인덱스를 반환합니다. 위치는 1 기반입니다. 문자열이 없으면 0을 반환합니다.
참고 : 내 최고의 Google 히트 문서에 매개 변수가 반전되었습니다.
SELECT
e
FROM
entity e
WHERE
(0 < LOCATE(:searchStr, e.property))
내가 늦었는지 또는 범위를 벗어 났는지 모르겠지만 내 의견으로는 다음과 같이 할 수 있습니다.
String orgName = "anyParamValue";
Query q = em.createQuery("Select O from Organization O where O.orgName LIKE '%:orgName%'");
q.setParameter("orgName", orgName);
JPA 기준 API에는 멋진 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%"));
그냥 ''
LIKE %:code%
- 아래 JPQL 쿼리를 사용하십시오.
강사 i에서 i를 선택합니다. 여기서 i.address LIKE CONCAT ( '%',: address, '%') ");
Use below Criteria code for the same:
@Test public void findAllHavingAddressLike() {CriteriaBuilder cb = criteriaUtils.criteriaBuilder(); CriteriaQuery cq = cb.createQuery(Instructor.class); Root root = cq.from(Instructor.class); printResultList(cq.select(root) .where (cb.like(root.get(Instructor_.address), "%#1074%"))); }
참고URL : https://stackoverflow.com/questions/1341104/parameter-in-like-clause-jpql
'IT story' 카테고리의 다른 글
Perl에서 @_의 의미는 무엇입니까? (0) | 2020.09.18 |
---|---|
Visual Studio의 느린 디버깅 문제 (0) | 2020.09.17 |
Rails 콘솔 / irb 출력을 억제하는 방법 (0) | 2020.09.17 |
Postgresql이 수퍼 유저로 "createdb"를 사용하여 db를 생성하지 않지만 오류를 출력하지 않음 (0) | 2020.09.17 |
논리 AND 연산자 &&와 함께 Swift if let 사용 (0) | 2020.09.17 |