Мне нужно создать запрос, и мне нужно COUNT(*)
и HAVING COUNT(*) = x
.КАК использовать HAVING COUNT (*) с гибернацией
Я использую работу, которая использует класс 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
гибернации:
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
, запрос работает, но я не получаю t он HAVING COUNT(*)
фильтр в SQL ...
В основном запрос пытается получить в схеме master-detail все основные записи, где присутствует список деталей одновременно, например, если вы хотите знать, какие счета-фактуры оба продукта, А и В ".
Вот почему, если у меня есть 3 пункта в статье IN
, мне нужно использовать пункт HAVING COUNT = 3
.
Любая идея или предложение? С уважением,
К сожалению, я понял, проблема. Я заменяю класс CusotmProjections: .add (Projections.sqlGroupProjection («ensayo_id», groupBy, alias, types)), где groupBy, псевдоним и типы: \t \t \t Строка groupBy = "ensayo_id" + "имеющая" + "count (*) =" + String.valueOf (lineas. размер()); \t \t \t String [] alias = new String [1]; \t \t \t псевдоним [0] = "ensayo_id"; \t \t \t Тип [] type = new Тип [1]; \t \t Категория: [0] = Hibernate.INTEGER; и волшебство находится в группе String. – Nicolas400