如何在Hibernate中为下面给定的查询编写criteria builder api查询?batchId不是主键
从用户中选择批号('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();
除了数据库中存在的数据外,我什么也得不到。
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);
}
}
用这个。我假设您的batchId是整数
。
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();
我试图使用CritierBuilder/CrtieriaQuery执行select语句,从表a中选择某些字段,然后如果该记录存在于另一个表中,则使用布尔标志。 基本上,我有一个“官员”列表和一个用户列表。用户是使用该系统的人,可以为官员添加书签/保存信息。当用户询问官员时,我希望能够显示他们已经为哪些官员添加了书签。 所以这个查询,我在我的h2数据库控制台中运行,它(相当)有效。如果官员被用户12
我正在尝试使用criteriaBuilder和谓词构建一个SQL where子句,以创建一些SQL语句,如: AND或对列表周围的括号对于将它们与不存在分开很重要。这是因为和有优先权我得到的是 我可以构建所有谓词,没有问题,但我不知道如何让它在AND或PAIRES列表中添加括号 AND或OR对的列表是这样构建成1个谓词列表的 子查询是这样添加的 还有地点 每个AND或AND对周围的括号也一样好
问题内容: 如何使用Criteria编写以下SQL: 问题答案: 要使用NHibernate,产生如下查询: 我们必须选择: 将子选择映射为实体。 创建原始SQL查询 第一种选择是创建一些,并将其映射为一个实体。如果我们不喜欢视图(或无法创建视图),则可以使用NHibernate映射元素element的功能 : 第二种选择是关于使用NHibernate API创建本机/原始SQL: 它没有从映射中
问题内容: SELECT supplier_id FROM suppliers UNION ALL 我只是在查询的“ UNION ALL”子句上方和查询的“ UNION ALL”子句上方创建两个条件。 但是我的问题是我如何在条件中执行UNION ALL子句?提前致谢。 问题答案: 我认为hibernate不支持条件,但是您可以使用两个条件查询来获得预期的结果:
问题内容: 有没有一种方法可以使SQLAlchemy使用自定义列生成查询,该自定义列是与当前行相关的子查询: 使用ORM API? 我正在使用PostgreSQL 9.3和旧版本的SQLAlchemy 0.9.8 问题答案: 如果您经常需要这样做,并且/或者计数是模型不可或缺的一部分,则应该使用混合属性,如其他答案中所述。另一方面,如果只需要一个查询就可以使用,则可以使用或创建标量子查询: 子查询
查询1 查询2