根据其他条件将多个参数添加到条件

时间:2019-07-15 14:25:21

标签: java hibernate jpa

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

示例

  

首先,创建条件。

     

如果(条件1适用){向条件中添加另一个参数}

     

如果(条件2适用){向条件中添加另一个参数}否则{向条件中添加另一个参数}

     

最后,将结果显示在列表中。

到目前为止,我有这个摘要。

不幸的是,我没有提供测试环境,因此我无法测试如果在第一个命令之后放置另一个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>

1 个答案:

答案 0 :(得分:3)

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