SQL function 은 JPA 와 같이 Dialect 에 등록된 내용만 호출할 수 있다.
H2 Database 의 Dialect 에 정의되어 있는 함수이다.
public class H2Dialect extends Dialect

/**
* member 를 M 으로 변경하는 replace 함수 사용
*/
@Test
void sqlFunction() {
//given
//when
List<String> result = jpaQueryFactory
.select(Expressions.stringTemplate(
"function('replace', {0}, {1}, {2})",
member.userName, "member", "M"))
.from(member)
.fetch();
//then
for (String userName : result) {
System.out.println("userName = " + userName);
}
}
/**
* 소문자(lower)로 변경해서 비교
*/
@Test
void sqlFunction2() {
//given
//when
List<String> result = jpaQueryFactory
.select(member.userName)
.from(member)
.where(member.userName.eq(
Expressions.stringTemplate("function('lower', {0})", member.userName)))
.fetch();
//then
for (String userName : result) {
System.out.println("userName = " + userName);
}
}
lower 같은 ansi 표준 함수들은 querydsl 이 상당 부분 내장하고 있다.
따라서 다음과 같이 처리해도 결과는 같다.
.where(member.username.eq(member.username.lower()))