오봉이와 함께하는 개발 블로그

JPA - JPQL 함수 본문

BE/JPA

JPA - JPQL 함수

오봉봉이 2022. 6. 30. 17:41
728x90

JPQL 기본 함수

JPQL이 제공하는 표준 함수이기 때문에 DB에 관계없이 사용하면 된다.

  • CONCAT
    • 문자열을 합치는 함수
    • select concat('a', 'b') from Member m
  • SUBSTRING
    • 문자열을 자르는 함수
    • select substring(m.username, 2, 3) from Member m
  • TRIM
    • 공백 제거
  • LOWER, UPPER
    • 대문자, 소문자 변환
  • LENGTH
    • 문자의 길이
  • LOCATE
    • 1부터 시작해서 첫 번째 문자열(문자)이 두 번째 문자열에서 몇 번째 있는지 찾아주는 함수
    • select locate('de', 'abcdefg') from Member m
      • 4를 리턴해줌
  • ABS, SQRT, MOD
  • SIZE(JPA용도)
    • @XxxToMany 관계에서 컬렉션의 사이즈를 구해준다
    • select size(t.members) from Team t
      • Team의 입장에서 List<Member> members의 사이즈를 구해줌
  • INDEX(JPA용도)
    • select index(t.members) fron Team t
    • 일반적으로 사용할 수 있는 것은 아니고, @OrderColumn을 사용할 때 사용할 수 있다.
      • 값 타입 컬렉션에서 위치 값을 구할 때 사용

사용자 정의 함수 호출

JPQL이 제공하는 기본 함수로 해결하지 못 할 때 사용하면 좋다.
DB에 내장되어 있는 함수를 불러서 사용한다.
하이버네이트 사용 전 방언에 추가를 하고 사용하는 DB 방언을 상속받아, 사용자 정의 함수를 등록한다.

select function('group_concat', i.name) from Item i

  • group_concat
    • 조회되는 문자열들을 쉼표(,)로 구분하여 하나의 문자열로 합쳐준다

사용법

  • 먼저 Dialect를 만들어 등록을 해야 한다.
package dialect;

import org.hibernate.dialect.H2Dialect;
import org.hibernate.dialect.function.StandardSQLFunction;
import org.hibernate.type.StandardBasicTypes;

public class MyH2Dialect extends H2Dialect {
    public MyH2Dialect() {
        registerFunction("group_concat", new StandardSQLFunction("group_concat", StandardBasicTypes.STRING));
    }
}
<!-- persistence.xml -->
<property name="hibernate.dialect" value="dialect.MyH2Dialect"/>
  • 등록을 마친 후 사용하면 된다.

String query = "select function('grout_concat', m.username) From Member m";

출처 : 인프런 김영한 지식공유자님의 스프링 부트와 JPA 실무 완전 정복 로드맵 강의
728x90

'BE > JPA' 카테고리의 다른 글

JPA - 페치 조인 기본  (0) 2022.07.04
JPA - 경로 표현식  (0) 2022.07.01
JPA - JPQL 타입 표현과 기타식, 조건식  (0) 2022.06.30
JPA - 조인, 서브 쿼리  (0) 2022.06.30
JPA - 페이징  (0) 2022.06.30
Comments