오봉이와 함께하는 개발 블로그
JPA - JPQL 함수 본문
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