我想创建一个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>
。
答案 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()));