IT story

유사 절 JPQL의 매개 변수

hot-time 2020. 9. 17. 18:59
반응형

유사 절 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%

  1. 아래 JPQL 쿼리를 사용하십시오.

강사 i에서 i를 선택합니다. 여기서 i.address LIKE CONCAT ( '%',: address, '%') ");

  1. 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

반응형