0
我有一个SQL查询是这样的。如何在Hibernate中使用Having和group by子句?
SELECT VERSION_ID FROM VIEWTEST
where (item_id='I001' and value ='V001')
or (item_id='I002' and value ='V002')
or (item_id= 'I003'and value ='V003')
group by VERSION_ID
having count(1) = 3
我的ViewTest实体是这样的。
@Column(name = "version_id")
private String versionId;
@Column(name = "item_id")
private String itemId;
@Column(name = "value")
private String value;
这是我写的Crieteria查询。
CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder();
CriteriaQuery<String> query = criteriaBuilder.createQuery(String.class);
Root<ViewTest> testRoot = query.from(ViewTest.class);
List<Predicate> predicates = new ArrayList<Predicate>();
Predicate p1 = criteriaBuilder.equal(testRoot.get("itemId"), "I001");
Predicate p2 = criteriaBuilder.equal(testRoot.get("itemId"), "I002");
Predicate p3 = criteriaBuilder.equal(testRoot.get("itemId"), "I003");
Predicate v1 = criteriaBuilder.equal(testRoot.get("value"), "V001");
Predicate v2 = criteriaBuilder.equal(testRoot.get("value"), "V002");
Predicate v3 = criteriaBuilder.equal(testRoot.get("value"), "V003");
predicates.add(criteriaBuilder.and(p1 , v1));
predicates.add(criteriaBuilder.and(p2 , v2));
predicates.add(criteriaBuilder.and(p3 , v3));
现在我不知道如何添加组的By和Having子句到这个标准。
有人可以帮我吗?
找到了一个更好的方法来做到这一点。
刚刚添加到我的代码。
query.groupBy(testRoot.<String> get("versionId"));
query.having(criteriaBuilder.in(criteriaBuilder.count(testRoot.get("versionId"))).value(
queryCount));
这没有把戏。