COMMENT utiliser HAVING COUNT (*) avec hibernate
J'ai besoin de créer une requête et j'ai besoin de COUNT(*)
et HAVING COUNT(*) = x
.
Je suis sur un travail autour de qui utilise le CustomProjection
classe, que j'ai téléchargé quelque part.
C'est le SQL que je cherche à atteindre:
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
C'est le code, où j'utilise le Projection
Hibernate classe:
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() )
);
L'erreur est:
!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 je commente la ligne avec CustomProjections
classe, le travail de requête, mais je n'ai pas l' HAVING COUNT(*)
filtre dans le SQL ...
Fondamentalement la requête essayer de récupérer, dans un maître - détail du schéma, toutes les fiches où une liste de détails sont présents simultanément, comme si vous voulez tho savoir "des factures des deux produits A et B".
C'est pourquoi si j'ai 3 articles dans la IN
clause, j'ai besoin d'utiliser HAVING COUNT = 3
clause.
Toute idée ou suggestion?
Meilleures salutations,
source d'informationauteur Nicolas400
Vous devez vous connecter pour publier un commentaire.
J'ai compris le problème. - Je remplacer CusotmProjections classe, avec:
où groupBy, alias et les types sont:
et la magie est sur groupby Chaîne. –
Voici mon échantillon, il fonctionne très bien, peut-être utile :
Ma requête sql :
Et Critères seraient :
Si quelqu'un doit le faire dans le graal, il serait comme:
Où sqlGroupProjection est disponible depuis 2.2.0
http://grepcode.com/file/repo1.maven.org/maven2/org.grails/grails-hibernate/2.2.0/grails/orm/HibernateCriteriaBuilder.java/#267
critères.ajouter(Restrictions.sqlRestriction("1=1 count(*) = 2"));