简体   繁体   English

Hibernate Criteria builder IN 子句查询

[英]Hibernate Criteria builder IN clause query

How to write criteria builder api query in Hibernate for below given query?如何在 Hibernate 中为以下给定查询编写标准构建器 api 查询? batchId is not a primary key & not unique. batchId 不是主键且不是唯一的。

SELECT * FROM User WHERE batchID IN ('1', '3') SELECT * FROM User WHERE batchID IN ('1', '3')

I've tried:我试过了:

    CriteriaBuilder builder = entityManager.getCriteriaBuilder();
    CriteriaQuery<User> criteriaQuery = builder.createQuery(User.class);
    Root<User> userRoot = criteriaQuery.from(User.class);

    List<Integer> batchIdList = new ArrayList<>();
    batchIdList.add(1);
    batchIdList.add(3);

    Predicate queryPredicate = builder.in(userRoot.get(User_.batchId).in(batchIdList)); 

    criteriaQuery.select(userRoot);
    criteriaQuery.where(queryPredicate);

    TypedQuery<User> userQuery = entityManager.createQuery(criteriaQuery);

    List<User> userResult = userQuery.getResultList();

I get nothing but the data exists in the database.我什么也没得到,但数据存在于数据库中。

Use this.用这个。 I assume that your batchId is Integer .我假设您的 batchId 是Integer

 CriteriaBuilder builder = entityManager.getCriteriaBuilder();
        CriteriaQuery<User> criteriaQuery = builder.createQuery(User.class);
        Root<User> userRoot = criteriaQuery.from(User.class);
         criteriaQuery.select(userRoot);    

        List<Integer> batchIdList = new ArrayList<>();
        batchIdList.add(1);
        batchIdList.add(3);
        criteriaQuery            
  .where(builder.and(userRoot.get(User_.batchId).in(batchIdList)));
        TypedQuery<User> userQuery = entityManager.createQuery(criteriaQuery);

        List<User> userResult = userQuery.getResultList();

Working example of IN clause in criteria query of Hiberbate 5.3 and above. Hiberbate 5.3 及更高版本的标准查询中 IN 子句的工作示例。

Below example find the data of employees have name in (sumit,amit,vivek) and age 24.下面的示例查找姓名为 (sumit,amit,vivek) 且年龄为 24 的员工数据。

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Expression;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;


public void getCriteria() {

        Session session = null;
        try {
            session = getSessionfactory().openSession();
            CriteriaBuilder builder = session.getCriteriaBuilder();
            CriteriaQuery<Employee> criteria = builder.createQuery(Employee.class);
            Root<Employee> root = criteria.from(Employee.class);
            List<Predicate> predicates = new ArrayList<Predicate>();
            predicates.add(builder.in(root.get("name")).value("sumit").value("amit").value("vivek"));   // IN clause
            predicates.add(builder.equal(root.get("age"),24));
            criteria.select(root).where(predicates.toArray(new Predicate[] {}));
            List<Employee> employeeList = session.createQuery(criteria).getResultList();
        }
        catch(Exception e) {
            System.out.println(e);
        }

    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM