작성
·
808
0
@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);
}
}
위와 같이 실행했을 경우 아래 오류가 발생합니다.
Caused by: org.hibernate.QueryException: No data type for node: org.hibernate.hql.internal.ast.tree.MethodNode \-[METHOD_CALL] MethodNode: 'function (replace)' +-[METHOD_NAME] IdentNode: 'replace' {originalText=replace} \-[EXPR_LIST] SqlNode: 'exprList' +-[DOT] DotNode: 'member0_.username' {propertyName=username,dereferenceType=PRIMITIVE,getPropertyPath=username,path=member1.username,tableAlias=member0_,className=yhpark.querydsl.entity.Member,classAlias=member1} | +-[ALIAS_REF] IdentNode: 'member0_.member_id' {alias=member1, className=yhpark.querydsl.entity.Member, tableAlias=member0_} | \-[IDENT] IdentNode: 'username' {originalText=username} +-[PARAM] ParameterNode: '?' {label=1, expectedType=null} \-[PARAM] ParameterNode: '?' {label=2, expectedType=null}
답변 1
1
안녕하세요. 빅데이터AI님^^
SQL function은 JPA와 같이 Dialect에 등록된 함수만 호출할 수 있습니다.
자세한 등록과 사용 방법은
자바 ORM 표준 JPA 프로그래밍 - 기본편 강의
섹션 10에서 JPQL 함수 부분을 참고해주세요.
감사합니다.