2016-07-01 1 views
0

Ich versuche, eine JPA-Kriterienabfrage mit einer groupBy-Klausel zu erstellen. In meinem Fall meine groupBy Klausel ist dynamisch, so versuche ich, diese zu nutzen:So erstellen Sie eine Ausdrucksliste für die JPA-Kriteriengruppe By-Klausel?

CriteriaQuery<T> groupBy(List<Expression<?>> grouping); 

statt der üblichen:

CriteriaQuery<T> groupBy(Expression<?>... grouping); 

Das Problem ist, dass ich bin zu kämpfen, dies zu schaffen Ausdrucksliste Dies ist mein Code für den Moment:

CriteriaQuery<Tuple> criteria = cb.createTupleQuery(); 
    Root<Foo> foo = criteria.from(Foo.class); 

    Expression<String> barExp = foo.get("bar"); 
    Expression<String> bazExp = foo.get("baz"); 

    // I'd like to use a Expression List to build a dynamic group by clause with this. But something looks wrong and I don't know where... 
    List<Expression<String>> groupBy = Arrays.asList(barExp, bazExp); 

    // Consulta 
    criteria.multiselect(barExp, bazExp); 
    criteria.where(where); 

    // this works: 
    criteria.groupBy(barExp, bazExp); 
    // but I'd like to use this, but compiler give me a type error 
    //criteria.groupBy(groupBy); 

    TypedQuery<Tuple> query = em.createQuery(criteria); 
    List<Tuple> result = query.getResultList(); 

Das ist es also. Wie erstelle ich dynamisch eine JPA 2-Kriterienausdruckliste für eine groupBy?

Vielen Dank im Voraus!

Antwort

0

Beantworten meiner eigenen Frage hier in der Hoffnung, dass dies für jemand anderen nützlich ist.

Nach einiger Überlegung habe ich entdeckt, dass mit:

List<Expression<String>> 

die Compiler die unerwünschte überladene Version zu verwenden versuchen:

CriteriaQuery<T> groupBy(Expression<?>... grouping); 

anstelle der Version, die ich wollte:

CriteriaQuery<T> groupBy(List<Expression<?>> grouping); 

Eclipse half mir, die Typfehler mit meinem Code zu beheben:

// ... 

Expression<?> barExp = foo.get("bar"); 
Expression<?> bazExp = foo.get("baz"); 
List<Expression<?>> groupBy = Arrays.asList(codigoUGR, codigoGND); 

// ... 
criteria.groupBy(groupBy); 

Und das scheint das Problem zu beheben. Die Java-Wildcard-Syntax ("?") Ist mir etwas unbekannt, aber Eclipse Quick Fix Suggestion kam wieder zur Rettung :)

Verwandte Themen