Ich habe Funktion in meiner DAO-Implementierung für Abfrage ausgeführtORA-00979: keine GROUP BY-Ausdruck
SQL QUERY:
SELECT pct.IA_FILING_METHOD_CODE_ID, COUNT(*)
FROM Ia_Dossier pct
WHERE 1=1 and pct.INTERNATIONAL_FILING_DATE IS NOT NULL
AND pct.INTERNATIONAL_FILING_DATE>='11-SEP-08'
AND pct.INTERNATIONAL_FILING_DATE<='11-SEP-16'
GROUP BY pct.IA_FILING_METHOD_CODE_ID
HAVING pct.IA_FILING_METHOD_CODE_ID IS NOT NULL
Dies läuft in db gut, aber Fehler geben, wenn sie von Hibernate Code ausführen .
FUNKTION:
@Override
public List<Object[]> findStatsByROGroupedByFileFormat(Date startDate, Date endDate,String RO, String groupBy) {
StringBuilder jpqlQuery = new StringBuilder();
jpqlQuery.append("Select pct.").append(groupBy).append(",count(*) from IaDossier as pct where 1=1 and pct.internationalFilingDate is not null");
if(startDate!=null)
{
jpqlQuery.append(" and pct.internationalFilingDate >=:startDate");
}
if(endDate!=null)
{
jpqlQuery.append(" and pct.internationalFilingDate <=:endDate");
}
if(groupBy!=null && RO!=""){
jpqlQuery.append(" group by pct.").append(groupBy);
jpqlQuery.append(" having pct.").append(groupBy).append(" is not null");
}
System.out.println(jpqlQuery+"hc");
Query q = entityManager.createQuery(jpqlQuery.toString());
if(startDate!=null)
{
q.setParameter("startDate", startDate);
}
if(endDate!=null)
{
q.setParameter("endDate", endDate);
}
return (List<Object[]>)q.getResultList();
}
KONSOLE:
12:09:45,572 INFO [stdout] (http-localhost-127.0.0.1-8082-2) Select pct.iaFilingMethod,count(*) from IaDossier as pct where 1=1 and pct.internationalFilingDate is not null and pct.internationalFilingDate >=:startDate and pct.internationalFilingDate <=:endDate group by pct.iaFilingMethod having pct.iaFilingMethod is not null
12:09:45,730 INFO [stdout] (http-localhost-127.0.0.1-8082-2) Hibernate: select iadossier0_.IA_FILING_METHOD_CODE_ID as col_0_0_, count(*) as col_1_0_, iafilingme1_.IA_FILING_METHOD_CODE_ID as IA1_52_, iafilingme1_.EN_NAME as EN2_52_, iafilingme1_.END_DATE as END3_52_, iafilingme1_.FR_NAME as FR4_52_, iafilingme1_.IS_EFILING as IS5_52_, iafilingme1_.OFFICE_RESTRICTIONS_APPLY as OFFICE6_52_, iafilingme1_.START_DATE as START7_52_ from IA_DOSSIER iadossier0_ inner join IBPROD.IA_FILING_METHODS iafilingme1_ on iadossier0_.IA_FILING_METHOD_CODE_ID=iafilingme1_.IA_FILING_METHOD_CODE_ID where 1=1 and (iadossier0_.INTERNATIONAL_FILING_DATE is not null) and iadossier0_.INTERNATIONAL_FILING_DATE>=? and iadossier0_.INTERNATIONAL_FILING_DATE<=? group by iadossier0_.IA_FILING_METHOD_CODE_ID having iadossier0_.IA_FILING_METHOD_CODE_ID is not null
12:09:46,076 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (http-localhost-127.0.0.1-8082-2) SQL Error: 979, SQLState: 42000
12:09:46,078 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (http-localhost-127.0.0.1-8082-2) ORA-00979: not a GROUP BY expression
Ich weiß nicht, warum es diese GROUP BY
Fehler geben, wenn die Abfrage fein in SQL-Entwickler ausgeführt wird.
Ich weiß nichts über Hibernate, aber die ersten beiden Zeilen von Ihrer Konsole Ausgabe sehen interessant aus. Es scheint, Sie haben zwei verschiedene SQL-Anweisungen? Der erste scheint richtig gebildet zu sein, aber der zweite ist definitiv nicht. Es gibt eine Reihe von Elementen in der zweiten Auswahl, die nicht in der Gruppe enthalten sind. –