繁体   English   中英

Hibernate Criteria builder IN 子句查询

[英]Hibernate Criteria builder IN clause query

如何在 Hibernate 中为以下给定查询编写标准构建器 api 查询? batchId 不是主键且不是唯一的。

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

我试过了:

    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();

我什么也没得到,但数据存在于数据库中。

用这个。 我假设您的 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();

Hiberbate 5.3 及更高版本的标准查询中 IN 子句的工作示例。

下面的示例查找姓名为 (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