JPA Criteria API group_concat usage

后端 未结 3 905
萌比男神i
萌比男神i 2020-12-04 00:55

I am currently working on a report which needs a group_concat for one of the fields.

CriteriaQuery criteriaQuery = criteriaBuilder
             


        
3条回答
  •  粉色の甜心
    2020-12-04 01:06

    I figured out how to do this with Hibernate-jpa-mysql:

    1.) created a GroupConcatFunction class extending org.hibernate.dialect.function.SQLFunction (this is for single column group_concat for now)

    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.) i created the CustomMySql5Dialect class extending org.hibernate.dialect.MySQL5Dialect and registered the group_concat class created in step 1
    3.) On the app context, i updated the jpaVendorAdapter to use the CustomMySql5Dialect as the databasePlatform
    4.) Finally to use it

    criteriaBuilder.function("group_concat", String.class,
            sampleRoot.get("sampleColumnName"))
    

提交回复
热议问题