java - 使用 Spring data jpa 在运行时构建查询
问题描述
我正在使用这样的标准构建器在运行时构建查询。
通过几个因素过滤过滤器对象:开始日期和结束日期之间的日期,字符串字段匹配集合中的字符串之一等。
Predicate[] predicates = buildPredicates(filter, criteriaBuilder, root);
criteriaQuery.select(root).where(predicates);
TypedQuery<MonitorStatusHistory> query = entityManager.createQuery(criteriaQuery);
if (filter.getPage() != null && filter.getSize() != null) {
query
.setFirstResult(filter.getPage() * filter.getSize())
.setMaxResults(filter.getSize());
}
return query.getResultList();
如何使用 JPA Repository 中的 spring data jpa 工具实现相同的目标?
我需要支持像这样的查询
SELECT * FROM obj WHERE obj.date > filter.startDate and
obj.date < filter.finishDate and obj.num=12 or obj.num=32
假设过滤器类具有以下属性:
private Set<Integers> allowedNums; (allowed values for obj.num)
private ZonedDateTime startDate; (obj.date > this)
private ZonedDateTime finishDate; (obj.date < this)
private Integer page; (pagination page)
private Integer size; (pagination objs per page)
解决方案
推荐阅读
- macos - 错误:无法以英特尔默认前缀 (/usr/local) 在 ARM 处理器上安装 Homebrew
- linux - 使用 ssh 连接到 docker 容器时出错
- asp.net - 如何将 .net 核心 Web API 部署为虚拟目录
- postgresql - PostgreSQL:致命:用户“postgres”的密码验证失败
- reactjs - 在 NextJs 中的故事书设置“找不到模块'css-loader/lib/getLocalIdent'”期间出现问题
- html - 设置链接我的网页时显示的图像
- php - SQL 显示多条记录
- python - Python Socket.io 处理所有事件(从客户端捕获所有事件)
- python - 通过渲染模板烧瓶在html页面中重新加载表单而不刷新整个页面
- python - Tensorflow v1 对象检测 api mask_rcnn_inception_v2_coco 模型批量推理