JPQL 함수
기본 함수
기본 스펙에 정의된 함수
DB 종류에 상관없이 자유롭게 사용할 수 있다.
CONCAT
SUBSTRING
TRIM
LOWER, UPPER
LENGTH
LOCATE
ABS, SQRT, MOD
SIZE, INDEX(JPA 용도)
public class JpaMain {
public static void main(String[] args) {
Member member = new Member();
member.setName("관리자");
em.persist(member);
em.flush();
em.clear();
String query = "select concat ('a', 'b') From Member m";
List<String> result = em.createQuery(query, String.class).getResultList();
for (String s : result) {
System.out.println("s = " + s);
}
tx.commit();
}
}

사용자 정의 함수
select function('group_concat', i.name)
from Item i
기본 함수로 해결할 수 없을 때 사용한다.
하이버네이트는 사용하기 전에 방언에 추가해줘야 한다.
사용하는 DB 방언을 상속받고 사용자 정의 함수를 등록한다.
MySQL은
registerFunction()
으로 커스텀 함수를 정의하고 있다.DB에 종속적이게 되지만 미리 등록된 걸 사용할 수 있다는 이점이 있다.
public class MyH2Dialect extends H2Dialect {
public MyH2Dialect() {
// 등록하는 방법은 라이브러리 소스 코드를 참고해야 한다.
registerFunction("group_concat", new StandardSQLFunction("group_concat", StandardBasicTypes.STRING));
}
}

커스텀 한 함수를 생성, 등록한 뒤 두 데이터를 한 줄로 붙여서 출력했다.
Last updated
Was this helpful?