미해결
자바 ORM 표준 JPA 프로그래밍 - 기본편
group_concat 사용자 정의 함수 등록하는 방법
섹션 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_0s = 관리자,사용자2