Я понял, как это сделать с Hibernate-jpa-mysql:
1.) Создал класс GroupConcatFunction, расширяющий org.hibernate.dialect.function.SQLFunction (сейчас это только для одного столбца group_concat)
public class GroupConcatFunction implements SQLFunction {
@Override
public boolean hasArguments() {
return true;
}
@Override
public boolean hasParenthesesIfNoArguments() {
return true;
}
@Override
public Type getReturnType(Type firstArgumentType, Mapping mapping)
throws QueryException {
return StandardBasicTypes.STRING;
}
@Override
public String render(Type firstArgumentType, List arguments,
SessionFactoryImplementor factory) throws QueryException {
if (arguments.size() != 1) {
throw new QueryException(new IllegalArgumentException(
"group_concat shoudl have one arg"));
}
return "group_concat(" + arguments.get(0) + ")";
}
}
2.) Я создал класс CustomMySql5Dialect, расширяющий org.hibernate.dialect.MySQL5Dialect, и зарегистрировал класс group_concat, созданный на шаге 1
3.) В контексте приложения я обновил jpaVendorAdapter, чтобы использовать CustomMySql5Dialect в качестве базы данных платформы
4.) Наконец, использовать его
criteriaBuilder.function("group_concat", String.class,
sampleRoot.get("sampleColumnName"))