【发布时间】:2019-04-01 23:58:24
【问题描述】:
如何在 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();
我什么也没得到,但数据存在于数据库中。
【问题讨论】:
-
“我什么也得不到”。是的,您执行了 SQL,您可以查看生成了什么 SQL,这会告诉您您的 Criteria 是否错误。你看过吗?
-
启用休眠调试日志并查看它生成的查询。就这么简单。但是从您发布的代码来看,这看起来还不错。除非您的列名映射不正确。
标签: java hibernate jpa hibernate-criteria