Published 2022. 7. 26. 01:09

SQL function은 JPA와 같이 Dialect에 등록된 내용만 호출할 수 있다.


member M으로 변경하는 replace 함수 사용

@Test
public void sqlFunction() {
    List<String> result = queryFactory
            .select(
                    Expressions.stringTemplate("function('replace', {0}, {1}, {2})",
                            member.username, "member", "M"))
            .from(member)
            .fetch();

    for (String s : result) {
        System.out.println("s = " + s);
    }

}

 

 

소문자로 변경해서 비교해라

@Test
    public void sqlFunction2() {
        List<String> result = queryFactory
                .select(member.username)
                .from(member)
//                .where(member.username.eq(
//                        Expressions.stringTemplate("function('lower', {0})", member.username)))
                .where(member.username.eq(member.username.lower()))
                .fetch();

        for (String s : result) {
            System.out.println("s = " + s);
        }

    }

 

lower 같은 ansi 표준 함수들은 querydsl이 상당부분 내장하고 있다. 따라서 다음과 같이 처리해도 결과는 같다.

 

.where(member.username.eq(member.username.lower()))

 

 

 

 

출처 : 김영한 JPA 스프링 데이터 강의

복사했습니다!