CÓMO usar TENER CUENTA (*) con hibernación

Necesito crear una consulta y necesitoCOUNT(*) yHAVING COUNT(*) = x.

Estoy usando una solución que usa laCustomProjection clase, que descargué en alguna parte.

Este es el SQL que intento lograr:

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

Este es el código, donde uso laProjection Clase de 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() )
                );

El error es:

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

Si comento la línea conCustomProjections clase, la consulta funciona, pero no obtengo laHAVING COUNT(*) filtro en el SQL ...

Básicamente, la consulta intenta recuperar, en un esquema maestro-detalle, todos los registros maestros donde una lista de detalles está presente simultáneamente, como si desea saber "qué facturas tienen ambos productos, A y B".

Por eso si obtuve 3 elementos en elIN cláusula, necesito usarHAVING COUNT = 3 cláusula.

¿Alguna idea o sugerencia? Atentamente

Respuestas a la pregunta(8)

Su respuesta a la pregunta