首页 > 解决方案 > Spring Data如何在计数查询中重用规范?

问题描述

我正在为我的存储库使用 Spring Data,我希望能够结合简单的规范来构建复杂的查询。Specifications通过使用类和应用andor辅助方法,然后调用接受findAll的类的方法,这不是一项艰巨的任务。JpaSpecificationExecutor<T>Specification<T>

主要问题是我想重用现有规范而不是直接获取结果列表,而是将count聚合函数或groupBy聚合函数应用于规范并获取聚合函数的结果作为Long结果或List<Tuple>.

更具体地说,我在这里举了一个简单的例子:

public Specification<Person> getByNameSpec(String name) {
    return (root, query, builder) -> {
        return builder.equal(root.get(Person_.firstName), name);
    };
}

getByNameSpec在这个例子中,我有一个在我的类中命名的方法PersonServiceImpl,它打算在多个地方重用。我想在三个场景中使用这个规范:

  1. 计算名为“约翰”的人数
  2. job按每个组的另一个字段喜欢和计数将名为“John”的人分组
  3. 仅选择名为“John”的人的一两个字段

请注意,如果这些操作是可能的,我打算以这种方式大量使用规范。如果这是不可能的,我应该如何创建一些基本标准并在我的代码中重用它们?

标签: javaspring-bootspring-data-jpaspring-data

解决方案


推荐阅读