2016-07-01 28 views
0

我正在嘗試使用groupBy子句創建一個JPA Criteria查詢。 就我而言,我的GROUPBY子句是動態的,所以我想利用這個:如何爲JPA標準組By子句創建表達式列表?

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

而不是通常的:

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

的問題是,我掙扎創建這個表達式列表。 這是我現在的代碼:

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(); 

所以就是這樣。 如何爲groupBy動態創建JPA 2條件表達式列表?

在此先感謝!

回答

0

在這裏回答我自己的問題,希望這對其他人有用。

經過一番思考,我發現有:

List<Expression<String>> 

編譯器試圖使用不需要的重載的版本:

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

,而不是我想要的版本:

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

Eclipse幫助我用我的代碼修復了類型錯誤:

// ... 

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

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

而這似乎解決了這個問題。 Java通配符語法(「?」)對我來說有點不爲人知,但eclipse Quick Fix Suggestions又來了救援:)

相關問題