在查询中为combine列创建条件查询

zz2j4svz  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(238)

我被这个问题困住了,我想创建一个条件查询

select * from table
where (col1,col2) in ((val1,val2),(val2,val3),....)

我了解如何在单列上为in子句创建它,但我希望在两列的组合上使用in子句,其中in子句中的值是这两列的值元组列表。
好心的建议。

nxagd54h

nxagd54h1#

EntityManager entityManager;

public List<YourEntity> getEntitiesByParams(Map<Field1Class, Field2Class> params) {
    CriteriaBuilder cb = entityManager.getCriteriaBuilder();
    CriteriaQuery<YourEntity> query = cb.createQuery(YourEntity.class);
    Root<YourEntity> root = query.from(YourEntity.class);

    final List<Predicate> predicates = new ArrayList<>();
    for(Entry<Field1Class, Field2Class> entry : params.entrySet()) {
        Predicate predicate1 = cb.equal(root.get("field1"), params.getKey());
        Predicate predicate2 = cb.equal(root.get("field2"), params.getValue());

        predicates.add(
             cb.and(predicate1, predicate2)
        );
    }

    query.select(root)
         .where(
              cb.or(predicates.toArray(new Predicate[predicates.size()]))
         );

    return entityManager.createQuery(query).getResultList();
}

相关问题