当前位置: 首页 > 知识库问答 >
问题:

querydsl-collections和groupBy

欧阳山
2023-03-14

我试图使用querydsl-collections,但未能编写简单的groupBy表达式。以下是我的尝试:

 import static com.mysema.query.alias.Alias.$;
 import static com.mysema.query.alias.Alias.alias;
 import static com.mysema.query.collections.CollQueryFactory.from;
 import static java.util.Arrays.asList;

 import java.util.List;

 import com.mysema.query.Tuple;

 public class QuerydslCollectionsGroupByTest {

     public static void main(String[] args) {
         List<Foo> foos = asList(
                 new Foo("a1", 1),
                 new Foo("a1", 2),
                 new Foo("a1", 3),
                 new Foo("a2", 4),
                 new Foo("a2", 5),
                 new Foo("a2", 6)
                 );

         Foo f = alias(Foo.class, "foo");
         List<Tuple> result = from($(f), foos)
                 .groupBy($(f.getA()))
                 .list($(f.getA()), $(f.getSum()).sum());

         System.out.println(result);

     }

     public static class Foo {
         private String a;
         private Integer sum;

         public Foo() {
         }

         public Foo(String a, Integer sum) {
             this.a = a;
             this.sum = sum;
         }

         public String getA() {
             return a;
         }

         public Integer getSum() {
             return sum;
         }

         public void setSum(Integer sum) {
             this.sum = sum;
         }

         public void setA(String a) {
             this.a = a;
         }

     }

 }

但当我试着运行它的时候。我得到:

 Exception in thread "main" com.mysema.codegen.CodegenException: Compilation of public class Q_838101820_201273267_01405199074_997653153 {

     public static com.mysema.query.Tuple eval(com.sopovs.moradanen.zkoss.QuerydslCollectionsGroupByTest.Foo foo, com.mysema.query.types.QTuple a1) {
 return (com.mysema.query.Tuple)(a1.newInstance(foo.getA(), sum(foo.getSum())));    }

 }

  failed.
 /Q_838101820_201273267_01405199074_997653153.java:4: error: cannot find symbol
 return (com.mysema.query.Tuple)(a1.newInstance(foo.getA(), sum(foo.getSum())));    }
                                                            ^
   symbol:   method sum(Integer)
   location: class Q_838101820_201273267_01405199074_997653153
 1 error

     at com.mysema.codegen.JDKEvaluatorFactory.compile(JDKEvaluatorFactory.java:74)
     at com.mysema.codegen.AbstractEvaluatorFactory.createEvaluator(AbstractEvaluatorFactory.java:128)
     at com.mysema.codegen.AbstractEvaluatorFactory.createEvaluator(AbstractEvaluatorFactory.java:94)
     at com.mysema.query.collections.DefaultEvaluatorFactory.create(DefaultEvaluatorFactory.java:125)
     at com.mysema.query.collections.DefaultQueryEngine.project(DefaultQueryEngine.java:234)
     at com.mysema.query.collections.DefaultQueryEngine.evaluateSingleSource(DefaultQueryEngine.java:192)
     at com.mysema.query.collections.DefaultQueryEngine.list(DefaultQueryEngine.java:91)
     at com.mysema.query.collections.AbstractCollQuery.list(AbstractCollQuery.java:202)
     at com.mysema.query.collections.AbstractCollQuery.list(AbstractCollQuery.java:195)
     at com.sopovs.moradanen.zkoss.QuerydslCollectionsGroupByTest.main(QuerydslCollectionsGroupByTest.java:27)

共有1个答案

卢承弼
2023-03-14

Querydsl集合中尚不支持聚合预测https://github.com/Querydsl/Querydsl/issues/932

 类似资料:
  • Collections Meteor用集合保存数据。集合里保存的Javascript对象叫做文档。使用new Mongo.Collection声明一个集合。 new Mongo.Collection(name, [options]) Anywhere Constructor for a Collection Arguments name String The name of the collect

  • Scala拥有丰富的集合库。 集合是事物的容器。 这些容器可以是有序的,线性的项目集合,例如List,Tuple,Option,Map等。集合可以具有任意数量的元素或者被限制为零或一个元素(例如,Option)。 收藏可能是strict或lazy 。 延迟集合包含的元素在访问之前可能不会消耗内存,例如Ranges 。 另外,集合可能是mutable (引用的内容可以改变)或immutable (引

  • 集合类是用于数据存储和检索的专用类。 这些类为堆栈,队列,列表和哈希表提供支持。 大多数集合类实现相同的接口。 集合类用于各种目的,例如动态地为元素分配内存和基于索引等访问项目列表。这些类创建Object类的对象集合,这是VB中所有数据类型的基类。 。净。 各种集合类及其用法 以下是System.Collection命名空间的各种常用类。 单击以下链接以查看其详细信息。 类 描述和用途 Array

  • ES6引入了两种新的数据结构:地图和集合。 Maps - 此数据结构可将键映射到值。 Sets - 集类似于数组。 但是,集合不鼓励重复。 Maps Map对象是一个简单的键/值对。 地图中的键和值可以是原始的或对象。 以下是相同的语法。 new Map([iterable]) 参数iterable表示任何可迭代对象,其元素包含键/值对。 映射是有序的,即它们按插入顺序遍历元素。 地图属性 S

  • 在Java 2之前,Java提供了特殊类,如Dictionary, Vector, Stack,和Properties用于存储和操作对象组。 尽管这些课程非常有用,但它们缺乏一个统一的中心主题。 因此,您使用Vector的方式与使用Properties的方式不同。 Collections框架旨在实现多个目标,例如 - 框架必须是高性能的。 基本集合(动态数组,链表,树和哈希表)的实现非常高效。 该