[JPA] Querydsl에서 (group_concat) MySql 특수함수 사용하기

2022. 11. 18. 15:03Web/JAVA

1. MySql 환경에서 JPA + Querydsl 조합에서 group_concat을 사용하는 방법

  • 아무런 설정 없이 Expressions.stringTemplate() 함수를 이용해서 group_concat 사용하는 경우 아래와 같은 에러발생
java.lang.IllegalArgumentException: No pattern found for GROUP_CONCAT
  • SQLExpressions.groupConcat을 사용해서 group_concat을 사용하는 방법도 있지만, 해당 설정은 의존성과, 설정이 조금 복잡하기 때문에 Expressions.stringTemplate 기반으로 group_concat을 사용하는 방법

2. 설정 방법

public class MySqlCustomDialect extends MySQL8Dialect {
    public MySqlCustomDialect() {
        super();

        registerFunction("group_concat",
                new StandardSQLFunction("group_concat", new StringType())
        );
    }
}
  • MySql 버전에 맞춰 Dialect을 확장해서 설정
spring:
      jpa:
        ...
        show-sql: true
        database-platform: com.example.querydsl.config.MysqlCustomDialect
        ...
  • application.yml 에 propertise 에 해당사항을 설정해주거나 DbConfig 자바클래스에서 설정을 해줍니다.

3. 사용 방법

  • Expressions.stringTemplate("group_concat({0})", 컬럼명)
  • QueryDsl 쿼리 부분에서 저렇게 호출해서 사용하면 된다!