我被这个问题困住了,我想创建一个条件查询
select * from table where (col1,col2) in ((val1,val2),(val2,val3),....)
我了解如何在单列上为in子句创建它,但我希望在两列的组合上使用in子句,其中in子句中的值是这两列的值元组列表。好心的建议。
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(); }
1条答案
按热度按时间nxagd54h1#