JPA之EntityManager两种group方法
JPA对group的支持,其实并不太好。笔者选择了两种方法进行操作。
一种方法是采用原生的SQL语句。但使用此种方法需要注意如下问题:就是当被选择项(select的项目)本身不在group里,且没有聚合函数时,会产生错误。 PS:max、count、avg、min、sum函数等分组统计的函数,称为聚合函数。
因此,必须保证被选择项与group项对应,如下所示:
select A, B, max(C) ... group by A, B
另一种方法是使用Stream功能进行group。值得注意的是,Stream的group分组后,会生成一个Map。可以在Map里进行统计和执行操作。
类似过程如下:
Map<Pair<String, String>, List<Item>> mapDB = db .stream() .collect(Collectors.groupingBy(s -> Pair.of(s.k1, s.k2))); List<Item> db = new LinkedList(); for(Pair<String, String> pair: mapDB.keySet()){ Item payOnSumInfoItem = new Item(); Item.k1 = pair.getFirst(); Item.k2 = pair.getSecond(); Item.content = mapDB.get(pair).stream().mapToDouble(n -> n.how.doubleValue()).sum(); }
下一篇:
两种不同数据库的联合查询(presto)