java - 根据进一步的条件向标准添加多个参数
问题描述
我想创建一个休眠查询,其条件会根据进一步的条件动态变化
例子
首先,创建标准。
if (条件 1 适用) {向条件添加另一个参数}
if (条件 2 适用) {向条件添加另一个参数} else {向条件添加另一个参数}
最后,在列表中获取结果。
到目前为止,我有这个片段。
不幸的是,我没有提供测试环境,所以我无法测试如果我query.where
在第一个命令之后放置另一个命令会发生什么。我想使用多个where
子句,首先总是使用一个作为基础,然后在满足某些条件时添加更多。
session = HibernateUtil.openSession();
CriteriaBuilder cb = session.getCriteriaBuilder();
CriteriaQuery<MyClass> query = cb
.createQuery(MyClass.class);
Root<MyClass> root = query.from(MyClass.class);
query.select(root);
query.where(
cb.and(
cb.equal(root.get("dataPointId"), container.getDataPointId()),
cb.equal(root.get("datapointSubNumber"), subnumber)
)
);
我想根据条件指定更多 where 子句并将结果作为List<MyClass>
.
解决方案
您可以使用CriteriaBuilder
并将数组传递Predicates
给它。在添加谓词时,您可以根据条件使用 if-else 来构建动态列表。您可以拥有复杂的逻辑并相应地构建谓词数组。
像这样的东西:
List<Predicate> predicates = new ArrayList<Predicate>();
if ( <some condition> ) {
predicates.add(criteriaBuilder.like(<your query condition>));
} else {
predicates.add(criteriaBuilder.equal(<your query condition>));
}
最后:
query.where(criteriaBuilder.and(predicates.toArray()));
推荐阅读
- azure-functions - 使用无服务器功能 (Azure) 时如何处理下游 API 的限制?
- oracle - 如何计算pl/sql中的值
- python - 如何将转义序列转换为文字字符
- java - 在 Spring Boot 中的 autowired 类上 autowired 和 using new 关键字之间的区别?
- reactjs - foreach 循环在使用状态钩子 reactjs 上不起作用
- angular - 开玩笑单元测试“找不到具有未指定名称属性的控件”
- c++ - 修复 for 循环中的内存泄漏
- c++ - winsock 无法连接到本地主机
- javascript - 书只移到两个书架,而不是第三个书架。还有事件处理错误
- javascript - 如何在 Typescript 中循环对象?元素隐式具有“任何”类型,因为索引表达式不是“数字”类型