Почему я продолжаю получать ту же ошибку при использовании hibernate: ORA-00979: не выражение GROUP BY? - PullRequest
0 голосов
/ 05 февраля 2020

Я просто хочу показать список банковских транзакций. Я проверил запрос в oracle, и он работает: select bankDate, bankName from Bank where bankDate = '161222' group by bankDate, bankName Я также попытался использовать счетчик, чтобы показать сумму транзакции, которая была сделана в тот день, и это также работает. select bankDate, bankName, count(bankName) as amount from Bank where bankDate = '161222' group by bankDate, bankName

но почему-то, когда я использую запрос:

public List<Bank> listBank() {
       List<Bank> list = (List<Bank>) getHibernateTemplate().find(
               "from Bank  where bankDate = '161222'" ); 
   return list;
   }

для моего java проекта, это выглядело как «

Hibernate: select bank0_.ID as ID0_, bank0_.BANKDATE as TRX2_0_, bank0_.BANKNAME as CARD3_0_ from mydb.mytable bank0_ where bank0_.BANKDATE='161222' group by bank0_.BANKDATE , bank0_.BANKNAME
Feb 05, 2020 11:56:12 AM org.hibernate.util.JDBCExceptionReporter logExceptions
WARNING: SQL Error: 979, SQLState: 42000
Feb 05, 2020 11:56:12 AM org.hibernate.util.JDBCExceptionReporter logExceptions
SEVERE: ORA-00979: not a GROUP BY expression

Exception in thread "main" org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute query; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query
    at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:630)
    at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
    at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)
    at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
    at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:921)
    at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:913)
    at com.jalin.bank.dao.impl.BankDaoImpl.listBank(BankDaoImpl.java:44)
    at com.jalin.bank.bo.impl.BankBoImpl.listBank(BankBoImpl.java:41)
    at com.jalin.common.App.main(App.java:27)
Caused by: org.hibernate.exception.SQLGrammarException: could not execute query
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    at org.hibernate.loader.Loader.doList(Loader.java:2223)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
    at org.hibernate.loader.Loader.list(Loader.java:2099)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
    at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
    at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
    at org.springframework.orm.hibernate3.HibernateTemplate$30.doInHibernate(HibernateTemplate.java:930)
    at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419)
    ... 6 more
Caused by: java.sql.SQLSyntaxErrorException: ORA-00979: not a GROUP BY expression

    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399)
    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1059)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:522)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:257)
    at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:587)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:225)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:53)
    at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:774)
    at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:925)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1111)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:4798)
    at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:4845)
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1501)
    at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
    at org.hibernate.loader.Loader.doQuery(Loader.java:674)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
    at org.hibernate.loader.Loader.doList(Loader.java:2220)
    ... 15 more

, я пытался использовать некоторые из примеров, которые находятся на inte rnet, но это просто не будет работать со мной .. я также попытался использовать <property ... formula="count(bankName)"></property> для подсчета, но это все равно не принесет мне никакой пользы.

, если кто-то может помочь мне работать с Hibernate, очень приветствуются, я не очень знаком с этим. потому что я очень новый с весны MVC + Maven + Hibernate.

1 Ответ

0 голосов
/ 05 февраля 2020

Из документации:

В запросе, который вы запускаете вручную, вы выбираете две вещи, в то время как один спящий режим запускает три вещи. Ошибка в том, что вам нужно сгруппировать все столбцы, которые вы используете в предложении select

ORA-00979, происходит, когда предложение GROUP BY не содержит всех выражений в предложении SELECT. Любое выражение SELECT, которое не включено в функцию GROUP, должно быть указано в предложении GROUP BY. Это AVG, COUNT, MAX, MIN, SUM, STDDEV и VARIANCE. Возможно, вы также пытались выполнить инструкцию SELECT, содержащую предложение GROUP BY.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...