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