gpt4 book ai didi

mysql - 如何在hibernate中使用Having和group By子句?

转载 作者:行者123 更新时间:2023-11-29 23:28:27 25 4
gpt4 key购买 nike

我有一个类似这样的sql查询。

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

现在我不知道如何将 group By 和having 子句添加到此条件中。

有人可以帮我吗?

找到了更好的方法。

刚刚将以下内容添加到我的代码中。

query.groupBy(testRoot.<String> get("versionId"));
query.having(criteriaBuilder.in(criteriaBuilder.count(testRoot.get("versionId"))).value(
queryCount));

这成功了。

最佳答案

您看过投影吗? Hibernate developer guide: Projections

示例:

List results = session.createCriteria(Cat.class)
.setProjection( Projections.projectionList()
.add( Projections.rowCount() )
.add( Projections.avg("weight") )
.add( Projections.max("weight") )
.add( Projections.groupProperty("color") )
)
.list();

关于mysql - 如何在hibernate中使用Having和group By子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26766463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com