[英]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.