2014-10-28 218 views
4

queryDSL中的組concat SQL查詢的等效表達式是什麼? 我正在使用spring JPA的queryDSL,它已更新爲最新版本,在閱讀文檔時我無法找到這樣的東西。queryDSL中的組concat等價物

謝謝。

回答

0

我自己找到了答案。 它可以通過變換函數來完成在queryDSL

http://www.querydsl.com/static/querydsl/3.4.3/reference/html/ch03s02.html第3.2.4節

Map<Integer, List<Comment>> results = query.from(post, comment) 
    .where(comment.post.id.eq(post.id)) 
    .transform(groupBy(post.id).as(list(comment))); 

因此,舉例來說,如果你想通過對2列組,下面的代碼將工作:

Map<List<?>, List<Comment>> results = query.from(post, comment) 
    .where(comment.post.id.eq(post.id)) 
    .transform(groupBy(post.id, post.hooplah).as(list(comment))); 

其產生List_of_groupByFieldValues - > List_of_results的映射。

有人可以確認這是否是在queryDSL中執行組concat的標準方法?

1

我問開發人員添加該功能。這裏修復了這個問題。

https://github.com/querydsl/querydsl/commit/23e2471b4735ad50f5ac33ad539474d113bb5b07

,他們甚至提供在提交測試用例,所以這裏是一個例子:

@Test 
    @ExcludeIn(DERBY) 
    public void groupConcat() { 
     assertEquals(
       ImmutableList.of("Mike,Mary", "Joe,Peter,Steve,Jim", "Jennifer,Helen,Daisy,Barbara"), 
       query().select(SQLExpressions.groupConcat(employee.firstname)) 
         .from(employee).orderBy(groupConcatOrder()) 
         .groupBy(employee.superiorId).fetch()); 
    } 

    @Test 
    @ExcludeIn(DERBY) 
    public void groupConcat2() { 
     assertEquals(
       ImmutableList.of("Mike-Mary", "Joe-Peter-Steve-Jim", "Jennifer-Helen-Daisy-Barbara"), 
       query().select(SQLExpressions.groupConcat(employee.firstname, "-")) 
         .from(employee).orderBy(groupConcatOrder()) 
         .groupBy(employee.superiorId).fetch()); 
    } 

    private OrderSpecifier<?>[] groupConcatOrder() { 
     if (Connections.getTarget() == Target.POSTGRESQL) { 
      return new OrderSpecifier[] {employee.id.asc()}; 
     } else { 
      return new OrderSpecifier<?>[0]; 
     } 
    }