当前位置: 首页 > 面试题库 >

如何在hibernate状态下使用HAVING COUNT(*)

冀鸿才
2023-03-14
问题内容

我需要创建一个查询,并且需要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

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

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类注释该行,则查询工作正常,但是我没有HAVING COUNT(*)在SQL中获得过滤器…

基本上,查询会尝试在一个主详细信息架构中检索同时显示详细信息列表的所有主记录,例如,如果您想知道“哪些发票同时包含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 String上。–



 类似资料:
  • 问题内容: 什么和何时在hibernate状态下使用DiscriminatorValue注释的最佳方案是什么? 问题答案: 这两个链接帮助我最了解继承概念: http://docs.oracle.com/javaee/6/tutorial/doc/bnbqn.html http://www.javaworld.com/javaworld/jw-01-2008/jw-01-jpa1.html?pag

  • 问题内容: Hibernate不支持union,所以我想单独运行sql。但是最后如何合并这些值? 请告知如何分别执行两个sql,最后如何合并这些值? 问题答案: 请注意,UNION中的每个SELECT语句必须具有相同的列数。 这些列还必须具有相似的数据类型。另外,每个SELECT语句中的列必须具有相同的顺序。 如果是这样,请向您的查询添加别名: 您可以通过以下方式使用SQLQuery和AliasT

  • 问题内容: 我想使用hibernateHQL执行数据时间操作。 我想添加和减去两个日期,以及我想从特定日期减去1年或1个月。 在hibernate状态下如何使用HQL? 问题答案: 请参阅 在HQL中执行日期/时间数学运算? 举个例子 要使用自定义sql,您必须编写自己的hibernate方言并注册:

  • 问题内容: 我对Hibernate和Spring完全陌生,在尝试学习Spring,Hibernate,Maven等时,我只知道如何使用这三个方法来运行helloworld示例。根据我的基本理解,我被分配了执行乐观锁定的任务。就我用谷歌搜索,我只能看到它不是很困难,我所需要的只是在我的xml中添加一个版本标签,并在我的映射类中添加整数变量版本。 我的xml应该是这样的 当第二个用户保存时,hiber

  • 当Jackson试图将我的数据解析为Json时,我遇到了这个异常: 我有以下实体(名字已经用Stuff和Thing代替): 材料: 东西: 我一直在搜索这种错误。当json解析器试图解析由于延迟加载而未加载的对象时,似乎会发生这种情况。默认情况下,延迟加载似乎处于打开状态。我想避免将所有内容设置为“渴望”,所以我改为使用@JsonIgnore。这对我来说没有任何改变。如果能得到帮助,我将不胜感激,

  • 问题内容: hibernate如何访问java类的私有字段/方法,例如设置@Id? 谢谢 问题答案: 就像Crippledsmurf所说,它使用反射。请参阅反射:违反所有规则并hibernate:保留对象的合同。