JPA에서 setParameter에% (와일드카드 문자) 의 like 문장을 포함합니다

3653 단어 JavaEEJava
JPA setParameter () 로% (어댑터) 를 포함하는 like 문장을 만들 때 약간 난처했다.

딱한 사정


이러한 SQL을 수행하려는 경우
SQL
select * from user where user.name like '%keyword%';
JPQL로 쓰면 이런 느낌이 들어요.
JPQL
TypedQuery<User> query = entityManager.createQuery("SELECT u FROM User u WHERE u.name LIKE %:keyword%");
query.setParameter("keyword", keyword);
아니면 석영으로 둘러싸면 이런 느낌.
JPQL
TypedQuery<User> query = entityManager.createQuery("SELECT u FROM User u WHERE u.name LIKE '%:keyword%'");
query.setParameter("keyword", keyword);
둘 다 실행하면 다음 오류가 발생합니다.
ERROR o.h.hql.internal.ast.ErrorCounter - line 1:109: unexpected token: % 
antlr.NoViableAltException: unexpected token: %

해결책


이럴 때 이렇게 하면 처리하기 쉽다.
JPQL
TypedQuery<User> query = entityManager.createQuery("SELECT u FROM User u WHERE u.name LIKE :keyword");
query.setParameter("keyword", "%" + keyword + "%");
영어의 대문자와 소문자의 차이를 한층 더 흡수하고 싶다면 이렇게 할 수 있다.
JPQL
TypedQuery<User> query = entityManager.createQuery("SELECT u FROM User u WHERE UPPER(u.name) LIKE UPPER(:keyword)");
query.setParameter("keyword", "%" + keyword + "%");

좋은 웹페이지 즐겨찾기