java - Spring Data如何在计数查询中重用规范?
问题描述
我正在为我的存储库使用 Spring Data,我希望能够结合简单的规范来构建复杂的查询。Specifications
通过使用类和应用and
,or
辅助方法,然后调用接受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
,它打算在多个地方重用。我想在三个场景中使用这个规范:
- 计算名为“约翰”的人数
job
按每个组的另一个字段喜欢和计数将名为“John”的人分组- 仅选择名为“John”的人的一两个字段
请注意,如果这些操作是可能的,我打算以这种方式大量使用规范。如果这是不可能的,我应该如何创建一些基本标准并在我的代码中重用它们?
解决方案
推荐阅读
- node.js - 安装节点 sass 给出错误消息
- graph - 如何将 Redisgraph 转换为 networkx 图以用于 Node2vec 算法?
- azure - 查询受带宽 cosmos db 限制
- java - Minecraft Forge 取消事件/不通知服务器
- azure-devops - 在发布时使用原始构建管道构建以前的版本
- c# - 使用MVVM按下按钮时如何调用异步方法?
- switch-statement - 基于 SelectedValue 的动态标题(卡片视觉)
- java - 如何使用 graphql-spring-boot 向 GraphQL Java 添加检测?
- java - 如何从导航抽屉的片段移动到 Android Studio 上的活动?
- sparql - 使用 Wikidata SPARQL 查找特定单词的同义词