首页 > 解决方案 > 根据进一步的条件向标准添加多个参数

问题描述

我想创建一个休眠查询,其条件会根据进一步的条件动态变化

例子

首先,创建标准。

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>.

标签: javahibernatejpa

解决方案


您可以使用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()));

推荐阅读