gpt4 book ai didi

hibernate - 如何在 hibernate 中使用 HAVING COUNT(*)

转载 作者:行者123 更新时间:2023-12-02 22:00:07 26 4
gpt4 key购买 nike

我需要创建一个查询,并且需要 COUNT(*)HAVING COUNT(*) = x

我正在使用一种使用 CustomProjection 类的解决方法,该类是我在某处下载的。

这是我尝试实现的 SQL:

select count(*) as y0_, this_.ensayo_id as y1_ from Repeticiones this_
inner join Lineas linea1_ on this_.linea_id=linea1_.id
where this_.pesoKGHA>0.0 and this_.nroRepeticion=1 and linea1_.id in (18,24)
group by this_.ensayo_id
having count(*) = 2

这是代码,我在其中使用 Projection Hibernate 类:

critRepeticion.setProjection(Projections.projectionList()
.add( Projections.groupProperty("ensayo") )
.add( CustomProjections.groupByHaving("ensayo_id",Hibernate.LONG,"COUNT(ensayo_id) = "+String.valueOf(lineas.size()))
.add( Projections.rowCount() )
);

错误是:

!STACK 0
java.lang.NullPointerException
at org.hibernate.criterion.ProjectionList.toSqlString(ProjectionList.java:50)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getSelect(CriteriaQueryTranslator.java:310)
at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:71)
at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:67)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1550)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
at ar.com.cse.cseagro.controller.RepeticionController.buscarEnsayo(RepeticionController.java:101)

如果我用 CustomProjections 类注释该行,则查询可以工作,但我在 SQL 中没有得到 HAVING COUNT(*) 过滤器 ...

基本上,查询尝试在主从模式中检索同时存在详细信息列表的所有主记录,就像您想知道“哪些发票同时包含产品 A 和 B”一样。

这就是为什么如果我在 IN 子句中有 3 个项目,我需要使用 HAVING COUNT = 3 子句。

有什么想法或建议吗?谨致问候,

最佳答案

我发现了问题所在。我将 CusotmProjections 类替换为:

.add( Projections.sqlGroupProjection("ensayo_id", groupBy , alias, types));

其中 groupBy、别名和类型为:

 String groupBy = "ensayo_id" + " having " + "count(*) = " + String.valueOf(lineas.size());
String[] alias = new String[1];
Alias[0] = "ensayo_id";
Type[] types = new Type[1];
types[0] = Hibernate.INTEGER;

神奇之处就在于 groupby 字符串。 –

关于hibernate - 如何在 hibernate 中使用 HAVING COUNT(*),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8605708/

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