인프런 커뮤니티 질문&답변
group_concat 사용자 정의 함수 등록하는 방법
작성
·
92
1
섹션 11-9 JPQL 함수에서, 사용자 정의 함수(group_concat) 구현 시 Hibernate(6.4.2.Final)버전을 사용할 때 가능한 방법 공유드립니다.
강의에서 MyH2Dialect 클래스 구현하는 대신, FunctionContributor를 구현
public class MyH2FunctionContributor implements FunctionContributor {
@Override
public void contributeFunctions(FunctionContributions fc) {
TypeConfiguration typeConfig = fc.getTypeConfiguration();
SqmFunctionRegistry registry = fc.getFunctionRegistry();
// ✅ 문자열 반환 타입을 직접 조회
BasicType<?> stringType = typeConfig.getBasicTypeRegistry().getRegisteredType("string");
// ✅ 사용자 정의 함수 등록
registry.registerPattern(
"group_concat",
"group_concat(?1)",
stringType
);
}
}
서비스 등록 (META-INF/services/org.hibernate.boot.model.FunctionContributor)
jpql.MyH2FunctionContributor
예시 쿼리
Team team = new Team();
team.setName("teamA");
em.persist(team);
Member member = new Member();
member.setUsername("관리자");
member.setAge(10);
member.setType(MemberType.ADMIN);
Member member2 = new Member();
member2.setUsername("사용자2");
member2.setAge(10);
member2.setType(MemberType.USER);
member.changeTeam(team);
em.persist(member);
em.persist(member2);
em.flush();
em.clear();
String query = "select group_concat(m.username) from Member m";
List<String> result = em.createQuery(query, String.class).getResultList();
for (String s : result) {
System.out.println("s = " + s);
}결과 쿼리
Hibernate:
/* select
group_concat(m.username)
from
Member m */ select
group_concat(m1_0.username)
from
Member m1_0
s = 관리자,사용자2
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. uncia님.
Hibernate 6 버전 이상에서 사용자 정의 함수를 등록하는 과정은 이전 버전과 약간 다를 수 있습니다. FunctionContributor 인터페이스를 구현하여 사용자 정의 함수를 등록할 수 있는데, 이는 이전의 Dialect 클래스에서 함수 정의를 관리하던 방식과 차이가 있습니다.
사용자 정의 함수 등록 방법
FunctionContributor 구현
- 사용자 정의 함수를 통해 직접 SQL 패턴을 등록합니다.
- 문자열 반환 타입을
TypeConfiguration에서getBasicTypeRegistry로 직접 조회하고, 이를 바탕으로 함수를 등록합니다.
- 사용자 정의 함수를 통해 직접 SQL 패턴을 등록합니다.
서비스 파일 등록
META-INF/services/org.hibernate.boot.model.FunctionContributor파일에MyH2FunctionContributor클래스를 등록하여 Hibernate가 자동으로 탐지하도록 합니다.
JPQL 쿼리 사용
createQuery메소드를 통해 JPQL의 사용자 정의 함수를 호출할 수 있습니다.
질문자님께서 제공해주신 코드를 통해 group_concat 함수의 등록과 사용 방법을 잘 설명해 주셨습니다. 추가로, 기존의 강의 내용에서도 사용자 정의 함수에 대한 예시를 확인하실 수 있습니다.
추가적으로 참고할 수 있는 관련 질문 URL은 다음과 같습니다:
- “사용자 등록함”
이 질문에서도 개인 및 커뮤니티에서 제공한 여러 가지 사용자 정의 함수 구현 전략에 대해 설명하고 있으니 참조하시면 도움이 될 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





